Facebook Javascript表单数据照片上传:需要上传文件错误
Facebook Javascript Form Data Photo Upload: requires upload file error
我几乎搜索了每个帖子15-几个小时,还没有找到我问题的答案。我使用严格的Javascript上传照片到Facebook使用表单数据。我解码了JPEG图像(最初是svg -> canvas元素)中的base64数据,使用此解码方法(https://github.com/danguer/blog-examples/blob/master/js/base64-binary.js),然后将其转换为表单数据格式的字符串,如https://gist.github.com/andyburke/1498758(不使用XMLHttpRequest)。然后,我将该字符串作为post中的"source"参数。我一直得到一个"(#324)需要上传文件"。如果我为图片输入一个url,效果就很好了。有人能帮忙吗?谢谢!
// The function to post the image:
FB.api("/me/photos",
"POST",
{
"source": window.image_source,
"message": "...",
"fileName": "..."
},
function(response) {
console.log(response.error);
}
});
// How I got the image_source:
var img = canvas.toDataURL("image/jpeg");
var encoded = img.substring(img.indexOf(',')+1,img.length);
var decoded = decode(encoded);
convertToFormData(decoded);
function convertToFormData(imageData) {
var boundary = 'myboundary';
var formData = "Content-Type: multipart/form-data; boundary=" + boundary + ''r'n'r'n';
formData += '--' + boundary + ''r'n';
formData += 'Content-Disposition: form-data; name="source"; filename="' + "myfile" + '"'r'n';
for ( var i = 0; i < imageData.length; ++i )
formData += String.fromCharCode(imageData[i] & 0xff);
formData += ''r'n';
formData += '--' + boundary + ''r'n'+ 'Content-Disposition: form-data; name="message"'r'n'r'n';
formData += "Description" + ''r'n';
formData += '--' + boundary + '--'r'n';
window.image_source = formData;
}
function decode(input) {
var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
var lkey1 = keyStr.indexOf(input.charAt(input.length-1));
var lkey2 = keyStr.indexOf(input.charAt(input.length-2));
var bytes = (input.length/4) * 3;
if (lkey1 == 64) bytes--;
if (lkey2 == 64) bytes--;
var chr1, chr2, chr3; var enc1, enc2, enc3, enc4;
var i = 0;var j = 0;
var uarray = new Uint8Array(bytes);
input = input.replace(/[^A-Za-z0-9'+'/'=]/g, "");
for (i=0; i<bytes; i+=3) {
enc1 = keyStr.indexOf(input.charAt(j++));
enc2 = keyStr.indexOf(input.charAt(j++));
enc3 = keyStr.indexOf(input.charAt(j++));
enc4 = keyStr.indexOf(input.charAt(j++));
chr1 = (enc1 << 2) | (enc2 >> 4);
chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
chr3 = ((enc3 & 3) << 6) | enc4;
uarray[i] = chr1;
if (enc3 != 64) uarray[i+1] = chr2;
if (enc4 != 64) uarray[i+2] = chr3;
}
return uarray;
}
你必须把画布图像变成一个Blob上传到Facebook:
const dataURItoBlob = (dataURI) => {
let byteString = atob(dataURI.split(',')[1]);
let ab = new ArrayBuffer(byteString.length);
let ia = new Uint8Array(ab);
for (let i = 0; i < byteString.length; i++) {
ia[i] = byteString.charCodeAt(i);
}
return new Blob([ia], {
type: 'image/jpeg'
});
}
之后,您可以使用博客与FormData:
formData.append('source', blob);
来源:http://www.devils-heaven.com/facebook-javascript-sdk-photo-upload-from-canvas/
相关文章:
- 咕噜声.js无法读取文件(错误代码:EISDIR)
- 在 ubuntu 14.04 VPS 上执行.js文件错误
- 命令代码jquery文件错误
- XMLHttpRequest无法加载Angular js中的文件错误
- 咕噜声/巴别塔错误:无法写入“dist”文件(错误代码:EISDIR)
- 未捕获的类型错误:对象[对象对象]在文件 y 错误中没有方法“x”
- angularjs + 下载 csv 文件 + 错误: [$injector:unpr] 未知提供程序
- 露天更新文件 - 错误开机自检
- Django ExtJs 6:上传文件错误
- Dropbox放入保护程序本地主机文件错误
- 我的网站在提交时出现文件错误
- php生成的JSON文件错误
- JSON文件错误
- 为什么Chrome开发者工具/控制台不显示javascript文件/错误是动态加载的
- 保存JSON文件错误
- Facebook Javascript表单数据照片上传:需要上传文件错误
- 如何在Node.js中上传文件?错误:无法POST/上载
- 外部javascript文件错误
- 使用jQuery表单插件上传文件-无效文件错误
- Json上传jquery文件错误