api文件 request可以看作axios
handleImport(data) {
const url = ''
return request.post(url, data, { responseType: 'blob' }, {
responseType: 'arraybuffer',
headers: {
'Content-Type': 'application/json'
}
})
}
js文件
downloadExcel(response, name) {
var blob = new Blob([response], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8' })
var downloadElement = document.createElement('a')
var href = window.URL.createObjectURL(blob)// 创建下载的链接
downloadElement.href = href
downloadElement.download = name // 下载后文件名
document.body.appendChild(downloadElement)
downloadElement.click() // 点击下载
document.body.removeChild(downloadElement) // 下载完成移除元素
window.URL.revokeObjectURL(href)
return href
}
第二版 多个文件会导出压缩包
const formatYS = (time) => { // time 为时间戳
if (!time) return
return moment(Number(time)).format('YYYY-MM-DD HH:mm:ss')
}
Vue.prototype.$download = (url, name, blob) => {
let href = "";
let nameArr = [];
let nameStr = "";
if (name) {
nameArr = name.split(".");
for (let i = 0; i < nameArr.length; i++) {
if (i == nameArr.length - 1) {
nameStr += `_${formatYS(new Date())}.${nameArr[i]}`;
} else {
nameStr += nameArr[i];
}
}
}
const downloadElement = document.createElement("a");
downloadElement.target = "_blank";
downloadElement.download = nameStr || +formatYS(new Date()) + ".txt"; // 下载后文件名
url && (downloadElement.href = url);
if (blob) {
href = window.URL.createObjectURL(new Blob([blob])); // 创建下载的链接
downloadElement.href = href;
}
document.body.appendChild(downloadElement);
downloadElement.click(); //点击下载
document.body.removeChild(downloadElement); // 下载完成移除元素
blob && href && window.URL.revokeObjectURL(href); // 释放掉blob对象
};
使用
// res是返回的数据流
this.$download("", "所有程序.zip", res);