Flask使用请求将上传的文件传递到另一个服务

时间:2018-10-26 19:51:12

标签: python-2.7 flask python-requests

我有一个包含文件的Python flask网络服务:

标题:

内容类型:multipart / formdata

内容:

“ fileTest”:已上传文件

当我使用请求库将文件传递给另一个服务时,出现上传文件未传递的问题。

我的代码:

files = {}
for form_file_param in request.files:
    fs = request.files[form_file_param]  # type: FileStorage
    files[form_file_param] = (fs.filename, fs.read())

req_headers = {
    "content-type": u "multipart/form-data; boundary=X-INSOMNIA-BOUNDARY",
}

r = requests.request(method='POST',
                     url=url,
                     headers=req_headers,
                     files=files)

我直接通过邮递员联系我的其他服务,并且该服务成功运行。我似乎无法弄清楚上面的代码在做什么。

1 个答案:

答案 0 :(得分:0)

您需要关注请求文档。

  

http://docs.python-requests.org/en/master/user/quickstart/#post-a-multipart-encoded-file

url = 'https://httpbin.org/post'
files = {'file': ('report.xls', open('report.xls', 'rb'), 'application/vnd.ms-excel', {'Expires': '0'})}
r = requests.post(url, files=files)
r.text

更改。观看OP响应后,由标题-Content-Type引起的问题。

这是一种特殊的内容类型,可以将其可视化为一个大请求中的多个子请求。这些子请求中的每一个(一个表单数据元素)都有其自己的标头集。实际数据的内容类型在那里。 1

注意:fsfs.read()之间没有什么区别

#models.py line 149
if isinstance(fp, (str, bytes, bytearray)):
    fdata = fp
else:
    data = fp.read()