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

FastAPI多文件上传POST接口报错Expected UploadFile received: <class str>求助

错误原因

你遇到的报错本质是requests传参规则使用错误:

  1. requests发送multipart/form-data类型请求时,普通表单字段和上传文件必须分开传递,分别对应post方法的data参数和files参数,不能将文件对象塞到普通表单字典中,否则requests会将文件序列化为字符串,导致FastAPI无法识别为UploadFile类型。
  2. 你最后尝试的files = [('files',(fi,open(fi,'rb'),'image/jpeg')) for fi in fis]结构本身符合多文件上传的参数要求,只是传参方式错误。

正确请求代码

import requests

url = "你的接口实际访问地址"
set_name = 'test'
n_index = 4
fis = ['t0.jpg', 't1.jpg', 't2.jpg', 't3.jpg']

# 普通表单字段单独放入data参数
data = {
    "set_name": set_name,
    "n_index": n_index
}

# 多文件参数构造,每个元组第一个元素必须和接口定义的文件参数名一致
files = [
    ("files", (fi, open(fi, "rb"), "image/jpeg"))
    for fi in fis
]

# 分别传递data和files参数,不需要手动设置Content-Type请求头
resp = requests.post(url, data=data, files=files)
print(resp.json())

# 请求完成后关闭文件句柄,避免资源泄漏
for item in files:
    item[1][1].close()

注意事项

  • 多文件列表中每个元组的第一个元素必须和FastAPI接口定义的文件参数名完全匹配,你接口的参数名为files,所以此处统一写为"files",不能用文件名作为键。
  • 不要手动添加Content-Type: multipart/form-data请求头,requests会自动生成带边界标识的请求头,手动设置会导致边界丢失,请求解析失败。
  • 生产环境建议用with上下文管理器打开文件,自动处理资源释放。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 18:24:03