FastAPI - 上傳檔案



首先,要向伺服器傳送檔案,需要將 HTML 表單的 enctype 設為 multipart/form-data,並將 input 型別設為 file 以渲染一個按鈕,單擊該按鈕後,你可以從檔案系統中選擇檔案。

<html>
   <body>
      <form action="https://:8000/uploader" method="POST" enctype="multipart/form-data">
         <input type="file" name="file" />
         <input type="submit"/>
      </form>
   </body>
</html>

請注意,表單的 action 引數為端點 https://: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})

訪問 https://:8000/upload/。你應該會看到包含選擇檔案按鈕的表單。單擊該按鈕以開啟要上傳的檔案。

FastAPI Uploading Files

上傳操作由 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}

在 FastAPI 中我們將使用shutil庫將接收到的檔案複製到伺服器位置,檔名為destination.png

廣告
© . All rights reserved.