/**
* 模拟a标签下载接口文件流
* @define 2022-2-16 17:31:52 @ 星沉大海
*
* @param {Object} response response.data为Blob对象或字符串数据流
* @param {String} name 包含后缀的文件名:不传则从response中截取
*
* @return {none}
*
*/
export function downloadFile(response, name='') {
let blob,fileName;
// 文件流对象检测
if(Object.prototype.toString.call(response.data).includes('Blob')) {
// 如果是json数据则不下载
if(response.data.type=='application/json') return
blob = response.data
} else {
blob = new Blob([response.data])
}
// 文件名处理
if(!name) {
let disposition = response.headers['content-disposition'];
name = disposition.replace('attachment;filename=', '');
fileName = decodeURI(name)
} else {
fileName = name
}
if (window.navigator.msSaveBlob) {
//这个是IE浏览器独有的方法,用来判断当时是不是IE浏览器
window.navigator.msSaveBlob(blob, fileName); //此方法即可下载成功
} else {
// 谷歌浏览器 创建a标签 添加download属性下载
let element = document.createElement("a");
const url = window.URL.createObjectURL(blob);
element.href = url;
element.download = fileName;
document.body.appendChild(element);
element.click();
document.body.removeChild(element);
window.URL.revokeObjectURL(url);
}
}
vue.js、js接口文件下载的方法封装
于 2022-02-17 10:18:43 首次发布