使用 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')}