I am using the example from the official documentation: https://fastapi.tiangolo.com/tutorial/request-files/#import-file
Server code:
@app.post("/uploadfile")
async def create_upload_file(data: UploadFile = File(...)):
print("> uploaded file:",data.filename)
return {"filename": data.filename}
Client code:
files = {'upload_file': open('config.txt', 'rb')}
resp = requests.post(
url = URL,
files = files)
print(resp.json())
The problem is that the server always responds with error 422:
{'detail': [{'loc': ['body', 'data'], 'msg': 'field required', 'type': 'value_error.missing'}]}
I am using Python 3 on both server and client and the python-multipart package is already installed.
Can someone please tell me what I am doing wrong, what am I missing, how should I fix the code?
Any hints are much appreciated.
CodePudding user response:
Well, I just realized my error (which is not immediately obvious for newbies like me :))
The parameter you pass on client side ('upload_file'
)
files = {'upload_file': open('config.txt', 'rb')}
must match the parameter on the server side ('data'
):
async def create_upload_file(data: UploadFile = File(...)):
So in order to work I had to rename on client side 'upload_file
' to 'data
':
files = {'data': open('config.txt', 'rb')} # renamed 'upload_file' to 'data'
That's it. Hopefully this helps some others as well.
CodePudding user response:
On client side you should use the key
you gave on server side. In your case, that is data
. Thus, you should replace upload_file
with data
, as shown below:
files = {'data': open('config.txt', 'rb')}