第一步要设置responseType(注意是和headers同级的属性)
//请求头要设置这个:注意不是在headers里面
{
headers: {'Content-Type': 'application/join'},
responseType: 'blob' // 注意不是在headers里面
}
第二步
使用ajax请求文件获得二进制流,得到的二进制流传入下面的方法中即可完成下载
exportReport(data) {
try {
var blob = new Blob([data], {
// 制定mime值
type: "application/vnd.ms-excel;charset=utf-8" // ms-office excel专用
// 或者 'application/force-download' (万能type,强制下载)
});
{
// 第一种生成url的方法
// 可以执行
let file = new FileReader();
file.readAsDataURL(blob);
file.onload = function (e) {
console.log(e.target.result);
let url = e.target.result
let aLink = document.createElement("a");
aLink.href = url;
aLink.setAttribute("download", "用户列表.xls");
aLink.click();
};
}
{
//第二种生成url的方法
//可以执行
var url = window.URL.createObjectURL(blob);
var aLink = document.createElement("a");
aLink.href = url;
aLink.setAttribute("download", "用户列表.xls");
aLink.click();
window.URL.revokeObjectURL(url); //释放掉blob对象
}
} catch (error) {
console.error(error);
}
},
//两个都可以,2选1
获取请求头Content-Disposition设置文件名称:
function resolveHeaderFileName(res){
if(!res.headers['content-disposition']){
return "";
}
let fileName=decodeURI(res.headers['content-disposition'].split(';')[1]).replace('filename=','');
return fileName;
}
// 如果出现ajax响应头中存在content-disposition,但前端获取不到的情况,请联系后端设置:
// Access-Control-Expose-Headers = Content-Disposition