You need to enable JavaScript to run this app. 使用Python requests调用Facebook Send API上传文件报#100附件上传失败错误
优惠活动
大模型
产品
解决方案
定价
更多

使用Python requests调用Facebook Send API上传文件报#100附件上传失败错误

问题根因定位
  • 文件格式与声明不匹配:代码下载的源文件是PGM二进制位图格式,仅修改文件后缀为.jpg就作为图片上传,Facebook接口会校验文件头魔数,识别出文件内容不属于标准JPG/PNG等支持的图片类型,直接判定附件无效。
  • JSON字段存在无效转义字符:代码里的recipient和message字段直接复用了网页复制带来的HTML转义字符(比如"、<),没有还原为标准JSON语法,接口无法正常解析参数,会连带触发通用类的上传失败报错。
  • recipient字段值存在多余空格:构造的用户ID值开头多了一个无效空格,会导致接收人身份解析失败,部分场景下会关联触发附件上传失败的通用提示。
  • 文件MIME类型未显式声明:对应官方curl示例里filedata=@/tmp/shirt.png;type=image/png的类型指定部分,requests构造请求时没有给文件字段传入对应的MIME类型,仅靠后缀猜测的类型和实际文件不匹配,会进一步提高校验失败概率。
  • 文件句柄管理不规范:代码里直接以非上下文管理器的方式打开文件传入请求参数,容易出现文件内容未完全读取就发起网络请求的情况,导致上传的文件流不完整,被接口判定为文件损坏。
  • 对应错误码2018047的触发逻辑完全匹配以上场景:该错误代表上传附件格式不支持、文件损坏、文件内容不完整、参数解析失败导致的附件校验异常。
修正后可正常运行的代码示例
import requests

# 注意:上传前提前把待传文件转成接口支持的标准格式(比如PNG/JPG),不要直接改后缀
upload_file_path = "本地待上传文件路径.png"
target_user_psid = "替换为真实的页面用户PSID"
page_access_token = "替换为真实的页面访问令牌"

# 构造multipart/form-data请求字段,完全对齐官方curl的参数结构
files = {
    # recipient字段:使用标准JSON语法,无多余空格、无无效转义字符
    'recipient': (None, f'{{"id":"{target_user_psid}"}}'),
    # message字段:保持JSON格式合法
    'message': (None, '{"attachment":{"type":"image", "payload":{"is_reusable":true}}}'),
    # filedata字段:按顺序传入文件名、打开的文件句柄、文件对应MIME类型,和curl的参数结构完全一致
    'filedata': (
        "upload_file.png",
        open(upload_file_path, 'rb'),
        'image/png'
    ),
}
api_url = "https://graph.facebook.com/v9.0/me/messages"
query_params = {"access_token": page_access_token}

try:
    response = requests.post(url=api_url, params=query_params, files=files)
    print(response.json())
finally:
    # 请求完成后主动关闭所有打开的文件句柄,避免资源泄漏
    for field_value in files.values():
        if hasattr(field_value[1], 'close'):
            field_value[1].close()
上传前校验清单
  • 确认PSID是当前关联页面下的有效用户ID,而非其他应用的用户标识
  • 确认上传文件大小符合接口限制:图片类附件最大支持25MB,其他类型普通文件最大支持100MB
  • 确认文件实际内容为接口支持的格式,没有出现后缀名和实际文件格式不匹配的情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.07 06:06:04