【问题标题】:Google Cloud Storage upload file to Facebook Attachment API谷歌云存储上传文件到 Facebook 附件 API
【发布时间】:2018-05-24 00:41:47
【问题描述】:

我有一个应用程序,我正在尝试为其创建 Facebook 机器人,它需要向用户发送照片卡。但是,为此我需要获取 Facebook 附件 ID,因为我无法直接从网络上传文件。 (https://developers.facebook.com/docs/messenger-platform/reference/attachment-upload-api/)

我的应用在 Firebase 上,由于某种原因,当我尝试 URL 时,它给了我这个错误:

{ “错误”: { "message": "(#546) 您尝试附加的文件类型不允许。请使用其他格式重试。", “类型”:“OAuthException”, “代码”:546, “error_subcode”:1545026, “fbtrace_id”:“H8qfi28cNvp” } }

我尝试的任何 URL 都会出现这种情况,但这里是一个测试 https://memes-dev.mymemestore.com/mms-tp1pESD7hgWWLiOUziHz.jpg

所以我尝试使用 Google Cloud Storage nodejs api 来获取读取流并像这样发送它

const stream = gcs().bucket('my bucket').file('mms-tp1pESD7hgWWLiOUziHz.jpg').createReadStream();

const message = new formdata();
message.append('message', '{"attachment":{"type":"image", "payload":{"is_reusable":true}}}');
message.append('filedata', stream);

fetch('https://graph.facebook.com/v2.6/me/message_attachments?access_token=<PAGE ACCESS TOKEN>',
{
    method: 'POST',
    headers: message.getHeaders(),
    body: message
})
.then(res => {
    console.log(res);
    return res.json();
})
.then(json => {
    console.log(json);
});

但这给了我以下错误

(#100) 上传的文件数不正确。必须只上传一个文件。

有人知道怎么回事吗?

谢谢

【问题讨论】:

  • 由于我的浏览器会立即弹出该 URL 的下载对话框,因此很可能您只是没有使用适当的 Content-Type 标头来提供它。
  • @CBroe 哦,对了!我完全忘记了这一点。

标签: facebook google-cloud-storage


【解决方案1】:

我忘记提及的一件事是,这一切都必须在无服务器的情况下完成。但是我通过使用tmpdir = path.join(os.tmpdir(), filename) 然后fs.createReadStream(tmpdir) 将图像下载到 tmpdir 来解决这个问题,这是可行的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-03
    • 1970-01-01
    • 2015-02-28
    • 1970-01-01
    • 2018-10-10
    • 2019-06-09
    • 1970-01-01
    • 2018-08-01
    相关资源
    最近更新 更多