FastAPI 如何在FastAPI中保存UploadFile
在本文中,我们将介绍如何在FastAPI中保存上传的文件(UploadFile)。
FastAPI是一个高性能(使用Pydantic和Starlette),易于使用和快速开发的Python Web框架。它具有强大的验证和文档功能,支持异步请求处理,同时也支持处理上传的文件。
阅读更多:FastAPI 教程
1. 使用FastAPI的UploadFile
接收文件
首先,我们需要使用FastAPI的UploadFile
类来接收上传的文件。在FastAPI中,我们可以通过将参数的类型声明为UploadFile
来接收上传的文件。例如,以下代码片段展示了如何在路由处理函数中接收上传的文件。
from fastapi import FastAPI, UploadFile
app = FastAPI()
@app.post("/upload")
async def upload_file(file: UploadFile = File(...)):
# 处理上传的文件
return {"filename": file.filename}
在上面的示例中,我们使用UploadFile
参数来声明一个上传的文件,该参数的类型为UploadFile
。注意,可以使用...
作为默认值来确保文件存在。
在上述代码中,当我们使用HTTP POST请求上传文件到/upload
路由时,FastAPI将自动解析请求中的文件,并将其传递给路由处理函数。
2. 保存上传的文件
一旦我们接收到上传的文件,我们可以选择将其保存到本地或者将其存储到数据库等其他位置。在接收到UploadFile
实例后,我们可以使用write()
方法将文件保存在指定位置。
以下是一个保存上传文件的示例代码:
@app.post("/upload")
async def upload_file(file: UploadFile = File(...)):
with open(f"uploads/{file.filename}", "wb") as buffer:
shutil.copyfileobj(file.file, buffer)
return {"filename": file.filename}
在上述示例中,我们将上传文件保存在uploads
文件夹中,使用文件的原始名称作为文件名。
3. 关闭上传的文件
保存上传的文件后,我们需要关闭文件以释放资源。FastAPI的UploadFile
实例包含一个名为close
的方法,可以用来关闭文件。
以下是一个关闭上传文件的示例代码:
@app.post("/upload")
async def upload_file(file: UploadFile = File(...)):
try:
with open(f"uploads/{file.filename}", "wb") as buffer:
shutil.copyfileobj(file.file, buffer)
finally:
file.file.close()
return {"filename": file.filename}
在上述示例中,我们使用try-finally
语句确保无论如何都会关闭文件。
4. 删除上传的临时文件
默认情况下,FastAPI将上传的文件保存在临时目录中。为了避免临时文件的堆积,我们应该在处理完上传文件后删除临时文件。
以下是一个删除临时上传文件的示例代码:
@app.post("/upload")
async def upload_file(file: UploadFile = File(...)):
try:
with open(f"uploads/{file.filename}", "wb") as buffer:
shutil.copyfileobj(file.file, buffer)
finally:
file.file.close()
await file.file.remove()
return {"filename": file.filename}
在上述示例中,我们使用remove()
方法删除临时上传文件。
总结
通过使用FastAPI的UploadFile
类,我们可以轻松地接收和处理上传的文件。我们可以使用write()
方法将文件保存在本地,使用close()
方法关闭文件,并使用remove()
方法删除临时上传文件。通过使用这些功能,我们可以方便地在FastAPI应用程序中保存上传的文件。
以上是关于在FastAPI中保存UploadFile的介绍,希望对你有所帮助!