Python requests上传multipart文件到FastAPI返回400 body解析错误
问题原因
- 手动设置了错误的
Content-Type头:使用requests的files参数上传文件时,requests会自动生成符合规范的multipart/form-data请求头,包含随机生成的boundary分隔符。你手动指定的boundary和请求体实际使用的分隔符不一致,FastAPI无法正确拆分解析请求体,直接抛出解析错误。 - 上传参数名和后端定义不匹配:后端接口定义的文件接收参数名为
files,你本地代码传的参数名为file,后端匹配不到必填的文件参数,也会触发解析失败报错。
解决方案
删除手动设置的Content-Type请求头,将上传文件的参数名修改为和后端一致的files即可。
修正后的调用代码如下:
def upload_data(self, files_paths): url = 'http://localhost:8000/user/send/' + str(self.email) # 参数名和后端保持一致为files f = {"files": ("1.jpg", open('F:/PROJECT/scan2excel/input/1.jpg', "rb"), "image/jpeg")} # 若需要上传多个文件,可使用列表格式: # f = [ # ("files", ("1.jpg", open('F:/PROJECT/scan2excel/input/1.jpg', "rb"), "image/jpeg")), # ("files", ("2.jpg", open('F:/PROJECT/scan2excel/input/2.jpg', "rb"), "image/jpeg")) # ] response = requests.post(url, files=f) # 调试可打印响应信息 print(response.status_code, response.json())
额外建议:打开文件时尽量使用
with上下文管理器,避免文件资源泄漏。
内容的提问来源于stack exchange,提问作者FMA FMA
相关产品推荐
相关产品推荐

