记⼀次线上⽆法下载EXCEL问题问题描述:
  线上使⽤XMLHttpRequest下载EXCEL,后续数据量过⼤,在⾕歌浏览器显⽰下载失败,⽹络错误
  代码如下
return new Promise((resolve, reject) => {
var xhr = new XMLHttpRequest();
xhr.open("POST", url, true); // 也可以使⽤POST⽅式,根据接⼝
// 定义请求完成的处理函数,请求前也可以增加加载框/禁⽤下载按钮逻辑
// 请求完成
if (this.status === 200) {
/
网络上xml是什么意思
/ 返回200
var blob = sponse;
console.log(this);
let fileName = '';
if (ResponseHeader('content-disposition')) {
fileName = ResponseHeader('content-disposition').split(";")[1].split("=")[1];
} else {
layui.layer.msg('下载失败,系统异常!');
return;
}
var reader = new FileReader();
console.log(e);
const href = ateObjectURL(new Blob(['\uFEFF' + sult], { type: 'text/plain;charset=utf-8' })) // 转换完成,创建⼀个a标签⽤于下载
var a = ateElement("a");
a.download = decodeURIComponent(fileName);
//a.download = fileName;
a.href = sult;
$("body").append(a); // 修复firefox中⽆法触发click
a.click();
resolve(200);
$(a).remove();
layui.layer.close(loadindex);
};
}
else if (this.status === 204) {
layui.layer.msg('没有数据,⽆法下载');
layui.layer.close(loadindex);
}
else {
layui.layer.msg('下载失败,系统异常!');
layui.layer.close(loadindex);
}
};
if (elem) {
var form = document.querySelector(elem);
var formdata = new FormData(form);
console.log(formdata);
// 发送ajax请求
xhr.send(formdata);
}
else {
xhr.send();
}
})
解决⽅案:
1.改成表单提交⽅式
2.使⽤axios⽅式:
var queryString = $(elem).serialize();
console.log('queryString', queryString);
url = url + "?" + queryString;
axios
.post(url, {}, { responseType: 'blob' })
.then(function (response) {
var filename = getFormatDate(new Date()) + '.xlsx';
var patt = new RegExp("filename=([^;]+\\.[^\\.;]+);*");
var result = (response.headers["content-disposition"]);
filename = decodeURIComponent(result[1]);
var blob = new Blob([response.data])
var downloadElement = ateElement('a');
var href = ateObjectURL(blob); //创建下载的链接
downloadElement.href = href;
downloadElement.download = filename; //下载后⽂件名
document.body.appendChild(downloadElement);
downloadElement.click(); //点击下载
veChild(downloadElement); //下载完成移除元素            vokeObjectURL(href); //释放掉blob对象
layui.layer.close(loadindex)
console.log(response);
})
.catch(function (error) {
layui.layer.close(loadindex)
console.log(error);
});

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。