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

如何使用requests库向FastAPI编写的接口上传多个文件

问题根源

  1. requests库的files参数不识别FastAPI的UploadFile对象,二者属于不同框架的类型,不能混用,这是第一次报错TypeError: 'UploadFile' object is not iterable的直接原因。
  2. 后续报错400/422是因为提交的文件结构和参数名不符合FastAPI多文件上传的要求:FastAPI接口接收的多文件参数名为files,请求时所有上传文件的字段名必须和接口参数名一致,且结构要符合requests的编码要求。

正确的多文件上传客户端实现

import os
import requests

input_dir = "替换为你的本地文件目录路径"

doc_list = os.listdir(input_dir)
files = []
for doc in doc_list:
    file_path = os.path.join(input_dir, doc)
    # 跳过子目录,只处理文件
    if not os.path.isfile(file_path):
        continue
    # 结构要求:(接口参数名, (文件名, 二进制读取的文件对象, [可选MIME类型]))
    files.append(("files", (doc, open(file_path, "rb"))))

response = requests.post("http://127.0.0.1:8080/uploadfiles/", files=files)
# 可选:打印结果验证
print(response.status_code)
print(response.json())

# 手动关闭打开的文件对象,避免资源泄漏,也可以用with上下文管理优化
for item in files:
    item[1][1].close()

结构说明

requests的files参数传多文件时,每个元素为元组结构,第一个值固定为FastAPI接口定义的参数名files,第二个值是包含文件名、文件对象的子元组,FastAPI会自动将所有字段为files的上传文件聚合为List[UploadFile]类型传入接口函数。
如果需要明确指定文件的MIME类型,可以在子元组中加第三个参数,示例:

files.append(("files", (doc, open(file_path, "rb"), "application/pdf")))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 18:18:00