使用Python调用WhatsApp Cloud API上传媒体时遇文件类型错误
解决WhatsApp媒体上传至Facebook Graph API的400错误
问题分析
Postman测试成功但Python requests调用报错,核心原因是requests默认的文件上传格式未正确传递文件元信息(文件名、Content-Type),导致API无法识别文件类型。
解决方案
1. 显式指定文件元信息
在files参数中,不要仅传递文件对象,而是通过元组显式指定文件名、文件对象、Content-Type,确保API能正确识别文件属性。
2. 规范文件路径拼接
使用os.path.join处理路径,避免Windows系统下的转义字符问题,保证文件路径正确。
3. 用with语句管理文件资源
避免文件句柄泄漏,同时确保文件读取状态正确。
修正后的代码
import requests import os # 拼接正确的文件路径 file_path = os.path.join(current, "default.png") url = f"https://graph.facebook.com/v15.0/{phone_id}/media" headers = {"Authorization": f"Bearer {auth_token}"} with open(file_path, "rb") as file_obj: # 显式指定文件的文件名、对象和Content-Type files = { "file": ("default.png", file_obj, "image/png") } data = { "messaging_product": "whatsapp", "type": "image/png" } upload_media = requests.post(url, data=data, files=files, headers=headers) # 查看响应结果 print(upload_media.json())
关键说明
- 文件元信息的作用:Postman会自动为上传文件添加
filename和Content-Type头,而requests仅传文件对象时可能缺失这些信息,导致API无法识别文件类型。显式指定后,请求格式和Postman完全一致。 - 类型匹配:
data中的type字段必须和文件实际类型严格对应,比如PDF文件需设为application/pdf,JPEG图片设为image/jpeg。 - 路径处理:
os.path.join会自动适配Windows/macOS/Linux的路径分隔符,避免手动拼接时的转义错误。
内容的提问来源于stack exchange,提问作者Fath-Likki
相关产品推荐
相关产品推荐

