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.
On client side you should use the same name given for the parameter on server side, when adding the file. In your case, that parameter is called data
, as shown below:
@app.post('/uploadfile')
async def create_upload_file(data: UploadFile = File(...)):
^^^^
Hence, you should replace upload_file
with data
on client side, as shown below:
url = 'http://127.0.0.1:8000/uploadfile'
files = {'data': open('config.txt', 'rb')}
r = requests.post(url=url, files=files)
More details and examples on how to upload file(s) using Python requests and FastAPI can be found in this answer, as well as here, here and here.