gpt4 book ai didi

javascript - Facebook Javascript 表单数据照片上传 : requires upload file error

转载 作者:行者123 更新时间:2023-11-28 08:06:20 25 4
gpt4 key购买 nike

我已经搜索了几乎每个线程 15 个多小时,但还没有找到我的问题的答案。我严格使用 Javascript 使用表单数据将照片上传到 Facebook。我使用此解码方法 ( https://github.com/danguer/blog-examples/blob/master/js/base64-binary.js ) 从 JPEG 图像(最初是 svg -> canvas 元素)解码 base64 数据,然后将其转换为 https://gist.github.com/andyburke/1498758 等表单数据格式的字符串(不使用 XMLHttpRequest)。然后我将该字符串作为帖子中的“源”参数。我不断收到“(#324) 需要上传文件”。如果我只输入图像的网址,它就可以完美地工作。有人可以帮忙吗?谢谢!

// 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;
}

最佳答案

您必须将 Canvas 图像转换为 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/

关于javascript - Facebook Javascript 表单数据照片上传 : requires upload file error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24748659/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com