0

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

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

非常感谢任何提示。

4

2 回答 2

0

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

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

而已。希望这对其他人也有帮助。

于 2022-02-18T16:11:44.277 回答
0

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

files = {'data': open('config.txt', 'rb')}
于 2022-02-18T16:11:53.360 回答