リクエストフォームとファイル¶
File
とForm
を同時に使うことでファイルとフォームフィールドを定義することができます。
File
とForm
のインポート¶
from fastapi import FastAPI, File, Form, UploadFile
app = FastAPI()
@app.post("/files/")
async def create_file(
file: bytes = File(), fileb: UploadFile = File(), token: str = Form()
):
return {
"file_size": len(file),
"token": token,
"fileb_content_type": fileb.content_type,
}
File
とForm
のパラメータの定義¶
ファイルやフォームのパラメータはBody
やQuery
の場合と同じように作成します:
from fastapi import FastAPI, File, Form, UploadFile
app = FastAPI()
@app.post("/files/")
async def create_file(
file: bytes = File(), fileb: UploadFile = File(), token: str = Form()
):
return {
"file_size": len(file),
"token": token,
"fileb_content_type": fileb.content_type,
}
ファイルとフォームフィールドがフォームデータとしてアップロードされ、ファイルとフォームフィールドを受け取ります。
また、いくつかのファイルをbytes
として、いくつかのファイルをUploadFile
として宣言することができます。
注意
path operationで複数のFile
とForm
パラメータを宣言することができますが、JSONとして受け取ることを期待しているBody
フィールドを宣言することはできません。なぜなら、リクエストのボディはapplication/json
の代わりにmultipart/form-data
を使ってエンコードされているからです。
これは FastAPI の制限ではなく、HTTPプロトコルの一部です。
まとめ¶
同じリクエストでデータやファイルを受け取る必要がある場合は、File
とForm
を一緒に使用します。