我有一个包含文件的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)
我直接通过邮递员联系我的其他服务,并且该服务成功运行。我似乎无法弄清楚上面的代码在做什么。
答案 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
注意:fs
和fs.read()
之间没有什么区别
#models.py line 149
if isinstance(fp, (str, bytes, bytearray)):
fdata = fp
else:
data = fp.read()