FastAPI 上传文件

FastAPI 上传文件

首先,要向服务器发送一个文件,你需要使用HTML表单的enctype作为 multipart/form-data ,并使用输入类型作为文件来渲染一个按钮,当点击时允许你从文件系统选择一个文件。

<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>

请注意,表单的行动参数到端点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})

访问http://localhost:8000/upload/。你应该得到带有 选择文件 按钮的表格。点击它,打开要上传的文件。

FastAPI - 上传文件

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程