Fastapi 简明教程
FastAPI - Uploading Files
首先,要向服务器发送文件,需要使用 HTML 表单的 enctype 作为 multipart/form-data ,并使用 input 类型作为文件,以便呈现一个按钮,单击该按钮时允许您从文件系统中选择一个文件。
<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 参数对应端点 [role="bare"] [role="bare"]http://localhost:8000/uploader ,并且方法设置为 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})
访问 [role="bare"] [role="bare"]http://localhost:8000/upload/ 。您应获取带有 Choose File 按钮的表单。单击它以打开要上传的文件。
上传操作由 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 将收到的文件复制到服务器位置