簡體   English   中英

使用 FastAPI 上傳文件返回錯誤 422

[英]File upload using FastAPI returns error 422

我使用的是官方文檔中的例子: https://fastapi.tiangolo.com/tutorial/request-files/#import-file

服務器代碼:

@app.post("/uploadfile")
async def create_upload_file(data: UploadFile = File(...)):
    print("> uploaded file:",data.filename)
    return {"filename": data.filename}

客戶端代碼:

files = {'upload_file': open('config.txt', 'rb')}
resp = requests.post(
        url = URL,
        files = files)
print(resp.json())

問題是服務器總是以錯誤 422 響應:

{'detail': [{'loc': ['body', 'data'], 'msg': 'field required', 'type': 'value_error.missing'}]}

我在服務器和客戶端上都使用 Python 3 並且已經安裝了 python-multipart package。

有人可以告訴我我做錯了什么,我錯過了什么,我應該如何修復代碼?

非常感謝任何提示。

在客戶端,您應該使用您在服務器端提供的key 在你的情況下,那就是data 因此,您應該將upload_file替換為data ,如下所示:

files = {'data': open('config.txt', 'rb')}

好吧,我剛剛意識到我的錯誤(對於像我這樣的新手來說這不是很明顯:))

您在客戶端傳遞的參數( 'upload_file'

files = {'upload_file': open('config.txt', 'rb')}

必須匹配服務器端的參數( 'data' ):

async def create_upload_file(data: UploadFile = File(...)):

因此,為了工作,我不得不在客戶端將“ upload_file ”重命名為“ data ”:

files = {'data': open('config.txt', 'rb')} # renamed 'upload_file' to 'data'

就是這樣。 希望這對其他人也有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM