[英]How to upload file using fastapi with vue? I got error unprocessable 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.