【问题标题】:File upload using FastAPI returns error 422使用 FastAPI 上传文件返回错误 422
【发布时间】:2022-02-19 00:11:53
【问题描述】:

我使用的是官方文档中的示例: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 包。

谁能告诉我我做错了什么,我错过了什么,我应该如何修复代码?

非常感谢任何提示。

【问题讨论】:

    标签: python file-upload fastapi http-status-code-422


    【解决方案1】:

    在客户端,您应该使用您在服务器端提供的key。在您的情况下,即data。因此,您应该将upload_file 替换为data,如下所示:

    files = {'data': open('config.txt', 'rb')}
    

    【讨论】:

      【解决方案2】:

      好吧,我刚刚意识到我的错误(这对于像我这样的新手来说并不是很明显:))

      你在客户端传递的参数('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'
      

      就是这样。希望这对其他人也有帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-07-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-30
        • 2021-12-19
        • 2020-11-12
        • 1970-01-01
        相关资源
        最近更新 更多