import ElementUI from 'element-ui'; // 依赖ElementUI
// url:接口地址 params: 参数 method:请求方式(GET,POST) name:下载文件名称需要携带后缀名(例:下载文件.doc)
export function downFile(url, params, method, name) {
let Loading;
Loading = ElementUI.Loading.service({
fullscreen: true,
text: '数据处理中,请稍后!!!'
})
let methods = method.toUpperCase()
//默认登录token
let token = window.localStorage.getItem('token')
var xhr = new XMLHttpRequest();
xhr.open(methods, url, true); // 也可以使用POST方式,根据接口
xhr.responseType = "blob"; // 返回类型blob
xhr.setRequestHeader("token", token);
xhr.setRequestHeader('Content-type', 'application/json')
// 发送ajax请求
methods === 'GET' ? xhr.send() : xhr.send(JSON.stringify(params))
xhr.onload = function () {
// 请求完成
if (this.status == 200) {
// 返回201
if (this.response.size < 150) {
Loading.close()
// 暂无数据
return false
}
var blob = this.response;
var reader = new FileReader();
reader.readAsDataURL(blob); // 转换为base64,可以直接放入a标签href
reader.onload = function (e) {
// 转换完成,创建一个a标签用于下载
var a = document.createElement('a');
a.download = name
a.href = e.target.result;
// 修复firefox中无法触发click
a.click();
}
// 如果下载不成功 可使用以下方法
// const url = window.URL.createObjectURL(blob)
// const a = document.createElement('a')
// a.href = url
// a.download = name
// a.click()
Loading.close()
} else {
Loading.close()
ElementUI.$message.error('导出文件失败,请联系管理人员')
}
};
}
https://www.jianshu.com/p/7e9dc9d4edb3 老版本已测试