使用API POST请求上传媒体失败,报JSON序列化错误
问题分析及解决方法
错误原因
你遇到的类型错误:BufferedReader类型的对象无法序列化为JSON,根源在于两点:一是你把open()返回的文件流对象(BufferedReader)放进了JSON结构里,但JSON格式不支持序列化这类二进制流对象;二是上传媒体文件的正确格式并非JSON,而是multipart/form-data。
解决步骤
- 删掉请求头里的
content-type: application/json,用requests上传文件时,它会自动生成正确的multipart/form-data请求头。 - 拆分文本数据和文件:把
templateData转成JSON字符串单独传递,文件作为独立的表单字段提交。
修正后的代码示例
import json # 先整理文本数据,转成JSON字符串 template_data = [ { "text": caption_new, "excerpt": excerpt } ] # 组织请求参数:文本数据和文件分开 data = { "templateData": json.dumps(template_data) } files = { "429279057136": open(f"{media}.png", "rb") # 注意修正文件名拼接方式,避免变量名错误 } headers = { "accept": "application/json", "Authorization": "Bearer gstoJiWSw3PdxtQr41oF1ghqv5jyTpcQ" } response = requests.post(url, data=data, files=files, headers=headers)
额外提醒
- 检查文件名路径:你原代码里的
f'{media.png}'写法有误,应该是f"{media}.png",确保变量和后缀名正确拼接。 - 如果接口对字段结构有特殊要求,需要根据实际文档调整
data和files里的字段名和层级。
内容的提问来源于stack exchange,提问作者Jenna Carter
相关产品推荐
相关产品推荐

