FastAPI怎么实现文件上传与多文件保存

老芳小哥_1458

老芳小哥_1458

2026-10-14

429人浏览

原创

fastapi多文件上传需用list[uploadfile]接收,逐个流式保存并显式close(),重命名文件名防覆盖,确保目录安全且分层存储。

fastapi怎么实现文件上传与多文件保存

FastAPI 实现文件上传本身不难,但“多文件保存”容易在路径处理、资源释放、并发写入和错误恢复上出问题。核心不是能不能传,而是传完能不能稳稳落地。

UploadFile + List[UploadFile] 是接收多文件的唯一正确方式

别用 File() 单独套多个参数,也别试图手动解析 request.body。FastAPI 要求明确声明类型:

  • List[UploadFile] 是接收 multipart/form-data 中多个同名 <input type="file" name="files"> 字段的强制约定
  • 如果前端发的是不同 name(如 file1, file2),后端必须写成多个独立参数,无法用列表统一接收
  • 每个 UploadFile 对象自带 filename、content_type 和可异步读取的 file 属性,不要提前 .read() 除非你确定文件小

保存多文件时必须逐个 await file.read() + 显式 close()

直接 await file.read() 会把整个文件加载进内存,大文件上传时可能 OOM。更稳妥的做法是流式保存:

FastAPI Flask Proxy
FastAPI Flask Proxy

FastAPI + Flask 混合部署最佳实践,解决路由定义、API 代理等常见问题,适用于同时运行 FastAPI API 与 Flask 前端的场景。

下载
  • 用 shutil.copyfileobj(file.file, buffer),其中 file.file 是底层 SpooledTemporaryFile 对象,支持 seek 和 read
  • 每个文件处理完必须 await file.close(),否则临时文件不会自动清理,磁盘会被占满
  • 推荐用 try/finally 包裹单个文件处理逻辑,避免某个文件失败导致后续文件没释放资源
  • 示例关键片段:
    for f in files:<br>    try:<br>        file_path = UPLOAD_DIR / f.filename<br>        with open(file_path, "wb") as buf:<br>            shutil.copyfileobj(f.file, buf)<br>    finally:<br>        await f.close()

UPLOAD_DIR 路径安全与并发写入风险

多文件同时上传时,如果都用原始 filename 保存,会覆盖或报错。必须做两件事:

  • 用 os.makedirs(UPLOAD_DIR, exist_ok=True) 确保目录存在,但注意 UPLOAD_DIR 绝对不能是用户可控路径(如来自表单字段),否则有路径遍历风险
  • 文件名必须重命名:至少加 UUID 或时间戳前缀,比如 f"{uuid.uuid4()}_{f.filename}";原始 f.filename 只能用于提取后缀或展示,不可直写磁盘
  • 如果上传量大,避免所有文件写到同一目录——Linux 下单目录文件过多会影响 inode 查找性能,建议按日期分层,如 uploads/2026/10/01/

最常被忽略的点是:UploadFile.file 是一个已打开的类文件对象,它背后是内存或临时磁盘缓冲,不 close() 就不会释放;而 shutil.copyfileobj 不会自动关闭源对象,这点和普通 open() 不同。

大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

fastapi

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Python FastAPI异步API开发_Python怎么用FastAPI构建异步API
Python FastAPI异步API开发_Python怎么用FastAPI构建异步API

Python FastAPI 异步开发利用 async/await 关键字,通过定义异步视图函数、使用异步数据库库 (如 databases)、异步 HTTP 客户端 (如 httpx),并结合后台任务队列(如 Celery)和异步依赖项,实现高效的 I/O 密集型 API,显著提升吞吐量和响应速度,尤其适用于处理数据库查询、网络请求等耗时操作,无需阻塞主线程。

2025.12.22

119

5

Python 微服务架构与 FastAPI 框架
Python 微服务架构与 FastAPI 框架

本专题系统讲解 Python 微服务架构设计与 FastAPI 框架应用,涵盖 FastAPI 的快速开发、路由与依赖注入、数据模型验证、API 文档自动生成、OAuth2 与 JWT 身份验证、异步支持、部署与扩展等。通过实际案例,帮助学习者掌握 使用 FastAPI 构建高效、可扩展的微服务应用,提高服务响应速度与系统可维护性。

2026.02.06

554

18

Python Web框架FastAPI 全栈开发教程合集
Python Web框架FastAPI 全栈开发教程合集

以 FastAPI 为核心,讲解现代 Python Web API 的高效开发方式,涵盖路由定义与路径参数/查询参数/请求体绑定、Pydantic 模型的数据校验与序列化、依赖注入(Depends)系统的分层设计、中间件与 CORS 配置、OAuth2 + JWT 认证流程、后台任务(BackgroundTasks)、WebSocket 实时通信、SQLAlchemy 异步 ORM 集成、自动生成 OpenAPI/Swagger 交互文

2026.05.09

576

23

Python FastAPI异步微服务与高性能接口设计
Python FastAPI异步微服务与高性能接口设计

本专题聚焦 Python FastAPI 框架在高性能接口与微服务开发中的应用,讲解异步请求处理、依赖注入机制、路由设计、数据库异步操作以及接口性能优化策略。结合实际项目案例,帮助开发者构建高并发、低延迟的现代化后端服务架构。

2026.06.16

479

12

pycharm怎么改成中文
pycharm怎么改成中文

PyCharm是一种Python IDE(Integrated Development Environment,集成开发环境),带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试、语法高亮、项目管理、代码跳转、智能提示、自动完成、单元测试、版本控制。此外,该IDE提供了一些高级功能,以用于支持Django框架下的专业Web开发。php中文网给大家带来了pycharm相关的教程以及文章,欢迎大家前来学习和阅读。

2023.07.25

2829

3

pycharm安装教程
pycharm安装教程

PyCharm是一款由JetBrains开发的Python集成开发环境(IDE),它提供了许多方便的功能和工具。本专题为大家带来pycharm安装教程,帮助大家解决问题。

2023.08.21

5317

4

如何解决pycharm找不到模块
如何解决pycharm找不到模块

解决pycharm找不到模块的方法:1、检查python解释器;2、安装缺失的模块;3、检查项目结构;4、检查系统路径;5、使用虚拟环境;6、重启PyCharm或电脑。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.12.04

738

5

如何安装pycharm
如何安装pycharm

安装pycharm的步骤:1、访问PyCharm官方网站下载最新版本的PyCharm;2、下载完成后,打开安装文件;3、安装完成后,打开PyCharm;4、在PyCharm的主界面中等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

834

5

python和pycharm的区别
python和pycharm的区别

Python和PyCharm是两个不同的概念,它们的区别如下:1、Python是一种编程语言,而PyCharm是一款Python集成开发环境;2、Python可以运行在各种不同的开发环境中,而PyCharm是专门为Python开发而设计的IDE等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

507

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
FastAPI SQL数据库实战文档
FastAPI SQL数据库实战文档

共0课时 | 0人学习

FastAPI官方教程文档
FastAPI官方教程文档

共0课时 | 0人学习