使用Javascript graph API v2.5将照片作为多部分/表单数据发布到Facebook

使用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

Facebook的Graph API(v2.5)用户Photo Edge表示,向Facebook发布照片有两种不同的方式:

1:将照片作为多部分/表格数据附加。对象的名称并不重要,但历史上人们一直使用source作为照片的参数名。其工作原理取决于您在发布文章时使用的SDK

2:通过使用url参数发布,使用已在internet上的照片:

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)缺少或无效的图像文件”作为响应。很公平-值得一试。