fastapi uploadfile
时间: 2025-05-30 16:04:06 浏览: 15
### 如何在FastAPI中处理文件上传
FastAPI 是一种现代的高性能 Web 框架,适用于 Python 3.6+ 版本,并支持通过标准 Python 类型提示来构建 API[^3]。 它提供了简单而强大的方式来处理文件上传操作。
#### 使用 `UploadFile` 处理单个文件上传
为了实现文件上传的功能,可以利用 FastAPI 提供的 `UploadFile` 和 `File` 类型提示。下面展示了一个简单的例子,说明如何接收并保存单个文件:
```python
from fastapi import FastAPI, File, UploadFile
import shutil
app = FastAPI()
@app.post("/upload/")
async def upload_file(file: UploadFile = File(...)):
with open(f"./{file.filename}", "wb") as buffer:
shutil.copyfileobj(file.file, buffer)
return {"filename": file.filename}
```
在这个示例中,`UploadFile` 被用来表示客户端发送过来的文件对象[^1]。 文件的内容可以通过访问 `file.file` 属性读取,并将其写入到服务器上的指定位置。
#### 使用 `List[UploadFile]` 处理多个文件上传
如果需要一次性上传多个文件,可以使用 `List[UploadFile]` 来定义参数类型。以下是相应的代码片段:
```python
from typing import List
from fastapi import FastAPI, File, UploadFile
import shutil
app = FastAPI()
@app.post("/upload/multiple/")
async def upload_multiple_files(files: List[UploadFile] = File(...)):
filenames = []
for file in files:
with open(f"./{file.filename}", "wb") as buffer:
shutil.copyfileobj(file.file, buffer)
filenames.append(file.filename)
return {"filenames": filenames}
```
这段代码展示了如何接受一组文件并将它们逐一存储至本地磁盘上[^1]。
#### HTML 表单配置
当创建前端表单以提交文件时,需要注意设置正确的属性以便浏览器能够正确传递数据给后端服务。具体来说,HTML `<form>` 标签应该具有如下特性:
- **method**: 应该设为 `"post"`,因为只有 POST 方法才能携带文件内容。
- **action**: 这里填写的是服务器端负责处理请求的具体路径地址。
- **enctype**: 设置成 `"multipart/form-data"` 告知浏览器当前表单可能包含二进制流数据 (即文件)[^2]。
例如,一个基本的 HTML 页面可能是这样的样子:
```html
<form action="/upload/" method="post" enctype="multipart/form-data">
Select a file to upload:
<input type="file" name="file">
<button>Submit</button>
</form>
<!-- For multiple uploads -->
<form action="/upload/multiple/" method="post" enctype="multipart/form-data">
Select files to upload:
<input type="file" name="files" multiple>
<button>Submit</button>
</form>
```
以上就是关于如何在 FastAPI 中完成文件上传的一些基础介绍以及实际应用中的编码实例。
阅读全文
相关推荐


















