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

Python requests上传PNG到Django REST Framework报错JPG正常如何解决

问题原因
  • MIME类型不匹配:你上传的是PNG格式图片,但files参数里指定的MIME类型是image/jpeg,Django REST Framework会校验文件格式和声明的MIME类型是否匹配,PNG对应的正确MIME类型为image/png。
  • 多余的请求头配置:不需要手动在headers里添加enctype="multipart/form-data",requests库在传入files参数时会自动生成带boundary分隔符的正确Content-Type头,手动指定反而会导致分隔标识缺失,引发后端解析异常。
  • 变量名冲突:你自定义的变量名json覆盖了导入的json标准库,虽然本次报错不是该原因导致,但后续操作JSON数据时会触发异常,建议调整变量名。
调整后可正常运行的代码
import json
import requests

user_f = open('categories.json',)
users = json.load(user_f)

media_api = 'http://127.0.0.1:8000/api/categories/'

files=[
    # 修正PNG对应的MIME类型
    ('category_image', ("Traditional-Art.png", open("Traditional-Art.png",'rb'),'image/png'))
]

# 修改变量名避免覆盖标准库
payload = {
    "category_name": "cat",
    "category_description": "desc",
    "user": 16
}

# 移除冗余的enctype头
headers = {
            "Accept": 'application/json, text/plain, */*'
        }

response = requests.request("POST", media_api, headers=headers, data=payload, files=files)
print(response.json())

如果调整后仍存在PNG上传报错,可以检查DRF对应序列化器的ImageField是否配置了allowed_extensions参数限制了仅允许上传JPG格式的文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 17:06:03