使用 FastAPI 上传文件 returns 错误 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 包。
有人可以告诉我我做错了什么,我错过了什么,我应该如何修复代码?
非常感谢任何提示。
好吧,我刚刚意识到我的错误(对于像我这样的新手来说这不是很明显:))
您在客户端传递的参数('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'
就是这样。希望这对其他人也有帮助。
在客户端,您应该使用您在服务器端提供的 key
。在您的情况下,即 data
。因此,您应该将 upload_file
替换为 data
,如下所示:
files = {'data': open('config.txt', 'rb')}
我使用的是官方文档中的示例: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 包。
有人可以告诉我我做错了什么,我错过了什么,我应该如何修复代码?
非常感谢任何提示。
好吧,我刚刚意识到我的错误(对于像我这样的新手来说这不是很明显:))
您在客户端传递的参数('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'
就是这样。希望这对其他人也有帮助。
在客户端,您应该使用您在服务器端提供的 key
。在您的情况下,即 data
。因此,您应该将 upload_file
替换为 data
,如下所示:
files = {'data': open('config.txt', 'rb')}