系列文章:
FastAPI 學習之路(一)fastapi--高性能web開發框架
FastAPI 學習之路(十二)接口幾個額外信息和額外數據類型
FastAPI 學習之路(十三)Cookie 參數,Header參數
我們去實現下上傳,看一下文件如何上傳
from fastapi import FastAPI, File, UploadFile app = FastAPI() @app.post("/files/") def create(file: bytes = File(...)): return {"file_size": len(file)} @app.post("/uploadfile/") def upload_file(file: UploadFile = File(...)): return {"filename": file.filename}
我們去測試下

試下另外一個接口

兩個接口都是可以上傳文件的。
File 是直接繼承自 Form 的類。
注意,從 fastapi 導入的 Query、Path、File 等項,實際上是返回特定類的函數。
UploadFile 的屬性如下:
-
filename:上傳文件名字符串(str),例如, myimage.jpg;
-
content_type:內容類型(MIME 類型 / 媒體類型)字符串(str),例如,image/jpeg;
-
file: SpooledTemporaryFile( file-like 對象)。其實就是 Python文件,可直接傳遞給其他預期 file-like 對象的函數或支持庫。
UploadFile 支持以下 async 方法,(使用內部 SpooledTemporaryFile)可調用相應的文件方法。
-
write(data):把 data (str 或 bytes)寫入文件;
-
read(size):按指定數量的字節或字符(size (int))讀取文件內容;
-
seek(offset):移動至文件 offset (int)字節處的位置;
-
例如,await myfile.seek(0) 移動到文件開頭;
-
執行 await myfile.read() 后,需再次讀取已讀取內容時,這種方法特別好用;
-
close():關閉文件。
因為上述方法都是 async 方法,要搭配「await」使用。
例如,在 async 路徑操作函數 內,要用以下方式讀取文件內容
contents = await myfile.read()
使用 async 方法時,FastAPI 在線程池中執行文件方法,並 awiat 操作完成。
FastAPI 的 UploadFile 直接繼承自 Starlette 的 UploadFile,但添加了一些必要功能,使之與 Pydantic 及 FastAPI 的其它部件兼容。
我們實現下多個文件的上傳
from fastapi import FastAPI, File, UploadFile from typing import List app = FastAPI() @app.post("/files/") async def create(fileS: List[bytes] = File(...)): return {"file_sizes": [len(file) for file in fileS]} @app.post("/uploadfile/") async def upload_file(fileS: List[UploadFile] = File(...)): return {"filenames": [file.filename for file in fileS]}
我們看下上傳結果


我們可以針對這些文件進行處理。
文章首發在公眾號,歡迎關注。

