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

Golang调用Facebook Graph API上传视频失败,等价curl可正常运行如何修复

问题原因

  • 上传视频时未指定正确的MIME类型:Go标准库multipart.CreateFormFile默认会将文件的Content-Type设为application/octet-stream,而Facebook接口要求视频附件必须传递正确的视频类MIME类型(如video/mp4),类型校验不通过就会返回(#100)错误。
  • 重复传递身份凭证:代码中同时在URL参数拼接了access_token,又添加了Authorization: Bearer <token>请求头,部分Facebook接口对重复传token的场景处理异常,会触发校验失败。

修改方案

  1. 替换原有CreateFormFile逻辑,手动创建表单Part并指定正确的Content-Type:
// 先导入textproto包
import "net/textproto"

// 替换原来的CreateFormFile代码段
partHeader := make(textproto.MIMEHeader)
partHeader.Set("Content-Disposition", fmt.Sprintf(`form-data; name="filedata"; filename="%s"`, fileArray[0].Filename))
// 如果支持多种视频格式,可以根据文件后缀动态判断MIME类型
partHeader.Set("Content-Type", "video/mp4")
fileWriter, err := writer.CreatePart(partHeader)
if err != nil {
    c.Err = model.NewAppError("upload_video", "upload_video.error", nil, "", http.StatusBadRequest)
    return
}
  1. 删除重复的身份凭证,比如删除多余的Authorization请求头即可:
// 删掉此行重复的身份校验头
// req.Header.Set("Authorization", "Bearer "+token)

修改后请求就和curl请求完全等价,即可正常上传视频获取attachment_id。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 04:57:01