推荐答案
在 FastAPI 中处理文件上传可以通过 File 和 UploadFile 类来实现。以下是一个简单的示例:
from fastapi import FastAPI, File, UploadFile
app = FastAPI()
@app.post("/uploadfile/")
async def create_upload_file(file: UploadFile = File(...)):
return {"filename": file.filename}在这个示例中,UploadFile 类用于处理上传的文件,File(...) 用于指定文件是必需的。
本题详细解读
文件上传的基本概念
在 FastAPI 中,文件上传通常通过 HTTP 的 multipart/form-data 请求来实现。UploadFile 类提供了对上传文件的访问和操作。
UploadFile 类的使用
UploadFile 类提供了以下常用方法:
file.read(size: int = -1): 读取文件内容。file.write(data: bytes): 写入文件内容。file.seek(offset: int): 移动文件指针。file.close(): 关闭文件。
示例代码解析
from fastapi import FastAPI, File, UploadFile
app = FastAPI()
@app.post("/uploadfile/")
async def create_upload_file(file: UploadFile = File(...)):
return {"filename": file.filename}file: UploadFile = File(...):File(...)表示文件是必需的,如果客户端没有上传文件,FastAPI 会返回 422 错误。file.filename:获取上传文件的文件名。
处理大文件
对于大文件,可以使用 async with 语句来确保文件在操作完成后被正确关闭:
@app.post("/uploadfile/")
async def create_upload_file(file: UploadFile = File(...)):
async with file:
contents = await file.read()
# 处理文件内容
return {"filename": file.filename}多文件上传
FastAPI 也支持多文件上传:
@app.post("/uploadfiles/")
async def create_upload_files(files: List[UploadFile] = File(...)):
return {"filenames": [file.filename for file in files]}在这个示例中,files 是一个包含多个 UploadFile 对象的列表。
文件上传的限制
可以通过 File 的参数来限制文件的大小和类型:
@app.post("/uploadfile/")
async def create_upload_file(file: UploadFile = File(..., max_size=1024 * 1024, file_types=["image/jpeg"])):
return {"filename": file.filename}max_size:限制文件的最大大小。file_types:限制文件的 MIME 类型。
通过这些方法,FastAPI 提供了灵活且强大的文件上传处理能力。