[FastAPI]複数ファイルをrequests.post()で渡す
FastAPIに外部のスクリプトファイルからFastAPIにrequests.post()で複数ファイルを渡す際につまづいたのでメモをここに残します。
uploadFile.py
from typing import List
from fastapi import FastAPI, File, UploadFile
from fastapi.responses import HTMLResponse
app = FastAPI()
@app.post("/uploadfiles/")
async def create_upload_files(params:dict,fileList: List[UploadFile]):
return hogehoge(params, files)
requests.post()で複数ファイルを渡したい場合は下記のようにすることで出来ました。
※dictのキーがエンドポイントのfileList(今回はこの名前にしました)という名前と一致していないとFastAPI側で受け取ることが出来ないので注意が必要です。
{エンドポイントの変数名:タプル(ファイル名、バイナリファイル)}
request.py
import requests
url = 'http//hogehogehogehoge:8000//uploadfiles/'
params = {
'キー1':'値1',
'キー2':'値2'
}
fileName1 = 'hoge1.xlsx'
fileName2 = 'hoge2.xlsx'
fileDataBinary1 = open(fileName1, 'rb').read()
fileDataBinary2 = open(fileName2,'rb').read()
#ここはリスト[]でも辞書{}でもどちらでも良いようです。
#FastAPIで受け取った際にfileListにちゃんと格納してくれました
fileList = {
'fileList': (fileName1, fileDataBinary1),
'fileList': (fileName2, fileDataBinary2)
}
#このパターンで書くとファイル渡せますが、ファイル名がfileListとなってしまい、拡張子も消えてしまいます
#fileList = {
#'fileList':fileDataBinary1
#}
res = requests.post(url, data= params, files= fileList)
uploadFile.py
@app.post("/uploadfiles/")
async def create_upload_files(params:dict,fileList: List[UploadFile]):
# print()でファイル名がしっかり渡せてることが確認できます
print(file.filename for file in files)
Author And Source
この問題について([FastAPI]複数ファイルをrequests.post()で渡す), 我々は、より多くの情報をここで見つけました https://qiita.com/Akimoto_30s/items/a84a06111f6373b50dc3著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .