Facebook的图谱API(v2.5)用户Photo Edge表示有两种不同的方式将照片发布到Facebook:
1:将照片作为multipart / form-data附加。对象的名称并不重要,但历史上人们已经使用source作为照片的参数名称。如何工作取决于你碰巧用来做帖子的SDK。
2:使用url参数发布,使用互联网上已有的照片:
FB.api(
"/me/photos",
"POST",
{
"url": "{image-url}"
},
function (response) {
if (response && !response.error) {
/* handle the result */
}
}
);
我需要使用第一个方法(multipart),因为我从画布获得了base64图像数据。
这似乎令人困惑,因为我发现这些文档信息非常丰富。据我所知,图像的urlData将在多部分数据中以某种格式与其他参数一起编码。我没有找到任何有用的示例代码/正确解释如何使用Javascript SDK& graph api v2.5;即使在stackoverflow上进行了详尽的搜索之后。我已经在stackoverflow上看到了关于这个的各种部分回答/未回答的问题...但我仍然无法使其工作。
请帮忙。谢谢 !
类似问题
Facebook Javascript Form Data Photo Upload: requires upload file error
Javascript: Upload image from Canvas to FB via Graph API
Upload Base64 Image Facebook Graph API - 不清楚Javascript Api是否在这里
[编辑] - 我已经尝试过的代码。
var ctx = document.getElementById('canvas2');
urldata=ctx.toDataURL("image/png");
FB.api('/photos', 'POST', {
message: 'testing Graph API',
access_token: accessToken,
url: urldata,
no_story:true
}, function (response) {
if (!response || response.error) {
console.log('Error occured:' + response.error.message);
} else {
alert('Post ID: ' + response.id);
}
}
);
回复 - " 发生错误:(#324)图像文件丢失或无效"
答案 0 :(得分:0)
我无法使用JS SDK,但它适用于简单的AJAX请求(使用Fetch API,axios或其他东西)。
首先,使用以下功能将Canvas Image转换为Blob:
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/