使用 FastAPI 上传文件返回错误 422

ste*_*tev 4 python file-upload http-status-code-422 fastapi

我正在使用官方文档中的示例: 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}
Run Code Online (Sandbox Code Playgroud)

客户端代码:

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

问题是服务器总是响应 422 错误:

{'detail': [{'loc': ['body', 'data'], 'msg': 'field required', 'type': 'value_error.missing'}]}
Run Code Online (Sandbox Code Playgroud)

我在服务器和客户端上都使用 Python 3,并且 python-multipart 包已经安装。

有人可以告诉我我做错了什么,我错过了什么,我应该如何修复代码?

非常感谢任何提示。

Chr*_*ris 6

在客户端添加文件时,您应该使用与服务器端参数相同的名称。在您的情况下,该参数称为data,如下所示:

@app.post('/uploadfile')
async def create_upload_file(data: UploadFile = File(...)):
                             ^^^^
Run Code Online (Sandbox Code Playgroud)

因此,您应该在客户端替换 upload_filedata,如下所示:

url = 'http://127.0.0.1:8000/uploadfile'
files = {'data': open('config.txt', 'rb')}
r = requests.post(url=url, files=files)
Run Code Online (Sandbox Code Playgroud)

有关如何使用 Python 请求和 FastAPI 上传文件的更多详细信息和示例,请参阅此答案以及此处此处此处