FastAPI - 上传文件
首先,要将文件发送到服务器,您需要设置 HTML 表单的 enctype 为 multipart/form-data,并使用 input 输入类型为 file 来呈现按钮, 单击时允许您从文件系统中选择一个文件。
<html> <body> <form action="http://localhost:8000/uploader" method="POST" enctype="multipart/form-data"> <input type="file" name="file" /> <input type="submit"/> </form> </body> </html>
请注意,表单的 action 参数到端点 http://localhost:8000/uploader 并且 method 设置为 POST。
此 HTML 表单使用以下代码呈现为模板 −
from fastapi import FastAPI, File, UploadFile, Request import uvicorn import shutil from fastapi.responses import HTMLResponse from fastapi.templating import Jinja2Templates app = FastAPI() templates = Jinja2Templates(directory="templates") @app.get("/upload/", response_class=HTMLResponse) async def upload(request: Request): return templates.TemplateResponse("uploadfile.html", {"request": request})
访问 http://localhost:8000/upload/。 您应该得到带有选择文件 按钮的表格。 单击它可以打开要上传的文件。
上传操作由 FastAPI 中的 UploadFile 函数处理
from fastapi import FastAPI, File, UploadFile import shutil @app.post("/uploader/") async def create_upload_file(file: UploadFile = File(...)): with open("destination.png", "wb") as buffer: shutil.copyfileobj(file.file, buffer) return {"filename": file.filename}
我们将使用 Python 中的 shutil 库将接收到的文件复制到服务器位置,名称为 destination.png