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

如何在FastAPI中实现动态多文件/图片上传请求?

动态多文件/图片上传的正确实现方式

你现在用固定参数(image1、image2...)的方式确实不够灵活——每次要支持更多文件都得改函数签名,完全没法应对动态数量的需求。刚好FastAPI本身就支持直接接收动态数量的文件上传,给你说个更优雅的实现方式:

核心思路

FastAPI 允许通过 List[UploadFile] 类型的参数来接收任意数量的上传文件,无需预先定义固定数量的参数。

完整实现代码

from fastapi import FastAPI, File, UploadFile
from typing import List

app = FastAPI()

@app.post("/upload-images/")
async def add_images(images: List[UploadFile] = File(...)):
    # 可以在这里添加文件处理逻辑,比如遍历文件、保存到本地等
    file_details = []
    for image in images:
        # 示例:获取文件基本信息
        content = await image.read()
        file_details.append({
            "filename": image.filename,
            "content_type": image.content_type,
            "size": len(content)
        })
        # 重置文件指针,避免后续操作读取异常
        await image.seek(0)
    
    return {"msg": "文件上传成功", "uploaded_files": file_details}

关键说明

  • 使用 List[UploadFile] 作为参数类型,FastAPI 会自动解析请求中所有同名的文件字段(这里参数名是images),不管数量多少都能接收。
  • 前端需要配合:在表单的文件输入框中设置 multiple 属性,并且确保输入框的 name 属性和后端参数名一致(比如 <input type="file" name="images" multiple>)。
  • 处理文件时,await image.read() 可以读取文件内容,如果需要保存到本地,可以用文件操作写入,记得用完后重置指针(await image.seek(0)),避免后续读取出错。

快速测试

你可以用FastAPI自带的/docs接口(启动服务后访问http://localhost:8000/docs),在/upload-images/接口中选择多个文件上传测试,非常直观。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 06:51:43