You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Google Cloud Storage上传文件至Facebook附件API遇错求助

解决Facebook Messenger图片附件上传的两个常见错误

你遇到的这两个错误其实都有明确的解决方向,咱们一步步来梳理:

一、解决「(#100) Incorrect number of files uploaded」错误

这个问题主要出在FormData的字段配置上,Facebook的Attachment Upload API有两个关键要求你没满足:

  1. 文件字段名必须是file
    你代码里用的是filedata,但Facebook官方要求上传文件的字段名必须是file,否则服务端识别不到你上传的文件,自然会提示“上传文件数量不对”。

  2. 需要为流指定文件名和Content-Type
    直接把GCS的读取流传给FormData,Facebook可能无法识别文件的类型和名称,导致解析失败。你需要在append方法里补充这两个参数。

修正后的代码示例:

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

// 注意字段名是`file`,不是`filedata`,同时指定文件名和Content-Type
message.append('message', JSON.stringify({
  "attachment": {
    "type": "image", 
    "payload": {"is_reusable": true}
  }
}));
message.append('file', stream, {
  filename: 'mms-tp1pESD7hgWWLiOUziHz.jpg',
  contentType: 'image/jpeg'
});

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

二、解决「(#546) The type of file you're trying to attach isn't allowed」错误

之前用URL上传时出现的这个错误,大概率是以下几个原因之一:

  • URL不可公开访问:Facebook的爬虫无法获取你的图片资源,比如你的存储桶设置了私有访问,或者URL需要登录验证、有防盗链限制。你可以用curl命令测试下:curl -L https://memes-dev.mymemestore.com/mms-tp1pESD7hgWWLiOUziHz.jpg,看能不能直接拿到图片内容。

  • Content-Type响应头不正确:服务器返回的Content-Type不是标准的图片类型(比如应该是image/jpeg,但实际返回的是text/html或者application/octet-stream)。你可以用curl -I https://memes-dev.mymemestore.com/mms-tp1pESD7hgWWLiOUziHz.jpg查看响应头里的Content-Type字段。

  • 图片格式或大小不符合要求:Facebook要求图片必须是JPG、PNG格式,且大小不超过10MB。你可以检查下图片的实际格式和大小是否符合规范。

先试试修正流上传的代码,应该能解决第二个错误;如果还是想使用URL上传,再逐一排查上面的几个点。

内容的提问来源于stack exchange,提问作者Shadow1349

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:57:17