如何在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
相关产品推荐
相关产品推荐

