我有一个Python烧瓶Web服务,它接收一个文件:
标题:
内容类型:多部分/表单数据
内容:
"fileTest":上传的文件
当我使用requests-lib将文件传递给另一个服务时,我会遇到上传的文件没有传递的问题。
我的代码:
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)
我通过邮递员直接联系我的其他服务,它成功地工作了。我似乎不明白我在上面的代码中做错了什么。
您需要遵循请求文档。
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()