我有一个带有URL路由的Flask web应用程序,它接收带有一些json的post请求,将其解析为一个.xlsx文件,然后返回带有send_file()
的文件
服务器端,我可以看到生成的.xlsx文件是正确的,但一旦在客户端下载,该文件就会损坏,无法打开,并且比预期的大很多(201KB对112KB)
我怀疑这是某种编码问题,但我已经尝试了很多东西,没有取得任何进展。有人能帮忙吗
烧瓶路线:
@app.route('/request/export_XLSX',methods=['POST'])
def request_export_XLSX():
json_model = json_util.loads(request.data.decode('ascii', 'ignore'))
xlsx_model = detox.xlsxFromJSONModel(json_model) # Returns file path
result = send_file(xlsx_model, as_attachment=True, attachment_filename=json_model['id']+'.xlsx', mimetype='application/vnd.ms-excel')
return result
JavaScript:
var exportModelExcel = function(){
var model = detox.fba.model
d3.selectAll('*').style("cursor","wait")
var modelJson = JSON.stringify(model)
$.ajax({
type: "POST",
url: "/request/export_XLSX",
data: modelJson,
success: function(d){
d3.selectAll('*').style("cursor","")
var blob = new Blob([d], {type: 'application/vnd.ms-excel'})
var link=document.createElement("a");
link.href=window.URL.createObjectURL(blob);
link.download=model.id+".xlsx";
link.click();
},
error: function(jqxhr,textStatus,errorThrown){
console.log("Error: " ,textStatus,errorThrown)
d3.selectAll('*').style("cursor","")
alert("There was an error exporting the model")
},
contentType: 'application/json',
responseType: 'blob',
processData: false,
});
}
这里有一个链接,您可以在其中看到好的和坏的.xlsx文件:https://gofile.io/d/xywI1D
好吧,我最终删除了ajax并使用了
XMLHTTPRequest
它工作得很好,并生成一个未损坏的.xlsx文件。🙂
相关问题 更多 >
编程相关推荐