使用Javascript graph API v2.5将照片作为多部分/表单数据发布到Facebook
Facebook的Graph API(v2.5)用户Photo Edge表示,向Facebook发布照片有两种不同的方式: 1:将照片作为多部分/表格数据附加。对象的名称并不重要,但历史上人们一直使用source作为照片的参数名。其工作原理取决于您在发布文章时使用的SDK 2:通过使用url参数发布,使用已在internet上的照片:使用Javascript graph API v2.5将照片作为多部分/表单数据发布到Facebook,javascript,facebook-graph-api,multipartform-data,todataurl,Javascript,Facebook Graph Api,Multipartform Data,Todataurl,Facebook的Graph API(v2.5)用户Photo Edge表示,向Facebook发布照片有两种不同的方式: 1:将照片作为多部分/表格数据附加。对象的名称并不重要,但历史上人们一直使用source作为照片的参数名。其工作原理取决于您在发布文章时使用的SDK 2:通过使用url参数发布,使用已在internet上的照片: FB.api( "/me/photos", "POST", { "url": "{imag
FB.api(
"/me/photos",
"POST",
{
"url": "{image-url}"
},
function (response) {
if (response && !response.error) {
/* handle the result */
}
}
);
我需要首先使用方法(multipart),因为我已经从canvas获得了base64图像数据
这似乎令人困惑,因为我觉得文档的信息量不大。我知道图像的urlData将在多部分数据以及其他参数中以某种格式进行编码。我找不到任何关于如何使用Javascript-SDK和graph-api v2.5实现这一点的工作示例代码/适当解释;即使在彻底搜索stackoverflow之后。我在stackoverflow上看到了各种部分回答/未回答的问题……但我仍然无法让它工作
请帮忙。谢谢
类似问题-不清楚是否存在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)缺少或无效的图像文件“我无法将JS SDK用于此,但它可用于简单的AJAX请求(使用Fetch API、axios或其他东西) 首先,使用以下功能将画布图像转换为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'
});
}
来源:我无法将JSSDK与此配合使用,但它可以与一个简单的AJAX请求配合使用(与Fetch API、axios或其他东西配合使用) 首先,使用以下功能将画布图像转换为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'
});
}
来源:我没有尝试过,但是如果使用url方法并传递base64编码的数据(前缀为
data:image/png),会发生什么;base64,
?(就像你对图像src一样)一些相关的问题@Archer urlData来自canvas.toDataURL(“图像/png”)类似于“数据:图像/png;base64,iVBORw0KG……ErkJggg==”,并且已经有数据:图像/png;base64,前缀为,但当我传递数据(已经以data:image/png;base64为前缀)时,我会收到错误消息“Error occured:(#324)缺少或无效的图像文件”作为响应。很公平-值得一试。我没有尝试过,但如果使用url方法并传递base64编码的数据,会发生什么情况,前缀为数据:image/png;base64,
?(就像你对图像src一样)一些相关的问题@Archer urlData来自canvas.toDataURL(“图像/png”)类似于“数据:图像/png;base64,iVBORw0KG……ErkJggg==”,并且已经有数据:图像/png;base64,前面加了前缀,但当我传递数据时(已经加了数据前缀:image/png;base64),我得到了错误消息“Error ocursed:(#324)缺少或无效的图像文件”作为响应。很公平-值得一试。