这个是后端返回url
exportFile(data, fileName){
console.log("data", data)
// 地址不存在时,禁止操作
if(!data) return;
// 下载文件并保存到本地
const callback = (data)=>{
// 创建a标签,使用 html5 download 属性下载,
const link = document.createElement('a');
// 创建url对象
const objectUrl = window.URL.createObjectURL(new Blob([data]));
link.style.display='none';
link.href=objectUrl;
// 自定义文件名称, fileName
link.download = fileName;
document.body.appendChild(link);
link.click();
// 适当释放url
window.URL.revokeObjectURL(objectUrl);
};
// 把接口返回的url地址转换为 blob
const xhr = new XMLHttpRequest();
xhr.open('get', data, true);
xhr.responseType = 'blob';
xhr.onload = ()=> {
// 返回文件流,进行下载处理
callback(xhr.response);
};
xhr.send(); // 不要忘记发送
},
// 调用
this.exportFile(res.data.url, 'xxx.xlsx')
这个是文件流
// 文件流必须在接口处写
download(data) {
return request({
url: request.adornUrl('后端的接口'),
method: 'post',
data: request.adornData(data),
// responseType: "blob", // 必须有得,因为我用的是后端返回得url所以注释掉了。
})
},
接口.then(res => {
let blob = new Blob([res.data], {
type: "application/vnd.ms-excel",
}); // type为所需要下载的文件格式
if (window.navigator && window.navigator.msSaveBlob) {
// IE浏览器、微软浏览器
/* 经过测试,微软浏览器Microsoft Edge下载文件时必须要重命名文件才可以打开,
IE可不重命名,以防万一,所以都写上比较好 */
window.navigator.msSaveBlob(blob, "xxx.xls");
} else {
//其他浏览器
let link = document.createElement("a"); // 创建a标签
link.style.display = "none";
let objectUrl = URL.createObjectURL(blob);
link.href = objectUrl;
link.download = "xxx.xls";
link.click();
URL.revokeObjectURL(objectUrl);
}
})