POST 方法将 header 添加到损坏它的 xlsx 文件
POST method adds a header to an xlsx file which corrupts it
我正在尝试使用 Python 请求库发送 xlsx 文件。我的请求如下所示:
import requests
url_attachment = "http://127.0.0.1:5000/api/attachment"
payload={}
files=[('file',(filename, open(filename,'rb'),'application/octet-stream'))
]
headers = {}
requests.request("POST", url_attachment, headers=headers, data=payload, files=files)
我的模拟服务器如下所示:
import flask
from flask import request
app = flask.Flask(__name__)
app.config["DEBUG"] = True
@app.route('/', methods=['GET'])
def home():
return "<h1>Hello World</h1>"
@app.route('/api/attachment', methods=['POST'])
def get_file():
data = request.files['file']
data.save('the-file.xlsx')
return "ok"
app.run()
模拟服务器工作正常,文件发送正确。
但是,当我调用实际的 API(我无权访问)时,文件已损坏。 API 的所有者向我发送了损坏的文件,经过检查后我可以看到内容被包裹在这个文件中:
-------------------------------28947758029299
Content-Disposition: form-data; name="the-file.xlsx"; filename="the-file.xlsx"
Content-Type: application/octet-stream
//content
-------------------------------28947758029299--
有人知道为什么会这样吗?我可以改变我的功能来阻止这种情况发生吗?我也尝试将 Content-Type 更改为 application/vnd。openxmlformatsofficedocument.spreadsheetml.sheet 但显然这会导致同样的问题。
此问题现已解决。如果以后有人遇到类似的问题,原因是 API 中的接收方法将内容视为 'multi-part form data'。
我正在尝试使用 Python 请求库发送 xlsx 文件。我的请求如下所示:
import requests
url_attachment = "http://127.0.0.1:5000/api/attachment"
payload={}
files=[('file',(filename, open(filename,'rb'),'application/octet-stream'))
]
headers = {}
requests.request("POST", url_attachment, headers=headers, data=payload, files=files)
我的模拟服务器如下所示:
import flask
from flask import request
app = flask.Flask(__name__)
app.config["DEBUG"] = True
@app.route('/', methods=['GET'])
def home():
return "<h1>Hello World</h1>"
@app.route('/api/attachment', methods=['POST'])
def get_file():
data = request.files['file']
data.save('the-file.xlsx')
return "ok"
app.run()
模拟服务器工作正常,文件发送正确。 但是,当我调用实际的 API(我无权访问)时,文件已损坏。 API 的所有者向我发送了损坏的文件,经过检查后我可以看到内容被包裹在这个文件中:
-------------------------------28947758029299
Content-Disposition: form-data; name="the-file.xlsx"; filename="the-file.xlsx"
Content-Type: application/octet-stream
//content
-------------------------------28947758029299--
有人知道为什么会这样吗?我可以改变我的功能来阻止这种情况发生吗?我也尝试将 Content-Type 更改为 application/vnd。openxmlformatsofficedocument.spreadsheetml.sheet 但显然这会导致同样的问题。
此问题现已解决。如果以后有人遇到类似的问题,原因是 API 中的接收方法将内容视为 'multi-part form data'。