我们去实现下上传,看一下文件如何上传
- from fastapi import FastAPI, File, UploadFile
-
- app = FastAPI()
-
-
- @app.post("/files")
- def create(file: bytes = File(...)):
- return {"file_size": len(file)}
-
-
- @app.post("/uploadfile")
- def upload_file(file: UploadFile = File(...)):
- return {"filename": file.filename}
我们去测试下

试一下另外一个 接口
两个接口都是可以上传文件的。
File 是直接继承自 Form 的类。
注意,从 fastapi 导入的 Query、Path、File 等项,实际上是返回特定类的函数。
UploadFile 的属性如下:
递给其他预期 file-like 对象的函数或支持库。
UploadFile 支持以下 async 方法,(使用内部 SpooledTemporaryFile)可调用相应的文件方法。
因为上述方法都是 async 方法,要搭配「await」使用。
例如,在 async 路径操作函数 内,要用以下方式读取文件内容
contents = await myfile.read()
使用 async 方法时,FastAPI 在线程池中执行文件方法,并 awiat 操作完成。
FastAPI 的 UploadFile 直接继承自 Starlette 的 UploadFile,但添加了一些必要功能,使之与 Pydantic 及 FastAPI 的其它部件兼容。
我们实现下多个文件的上传
- from fastapi import FastAPI, File, UploadFile
- from typing import List
-
- app = FastAPI()
-
-
- @app.post("/files")
- async def create(files: List[bytes] = File(...)):
- return {"file_sizes": [len(file) for file in files]}
-
-
- @app.post("/uploadfile")
- async def upload_file(files: List[UploadFile] = File(...)):
- return {"filenames": [file.filename for file in files]}
我们看上传结果


我们可以针对这些文件进行处理。