IE浏览器a标签无法下载问题解决(IE浏览器a标签download属性不兼容问题解决)
//下载文件流函数,只支持get方法。
export function downBlob(payload) {
return new Promise(((resolve, reject) => {
// 获取时间戳
let timestamp=new Date().getTime();
// 获取XMLHttpRequest
let xmlResquest = new XMLHttpRequest();
// 发起请求
xmlResquest.open("GET", payload.url +"?"+ (payload.param), true);
// 设置请求头类型
xmlResquest.setRequestHeader("Content-type", "application/json");
//返回类型为文件流
xmlResquest.responseType = "blob";
// 返回
xmlResquest.onload = function(oEvent) {
let content = xmlResquest.response;
//请求失败
if(xmlResquest.status === 404){
message.error("文件不存在,请稍后再试");
return;
}
//请求失败
if(xmlResquest.status != 200){
message.error("网络错误,请稍后再试");
return;
}
//
let reader = new FileReader();
reader.onload = function(event){
//json成功表示服务器报错,将错误信息提示出来
try {
let result = JSON.parse(reader.result);
message.error(result.errorMsg)
reject(result);
}catch (e) {
//json化失败,表示是一个文件流,将文件流下载下来
// 组装a标签
if('msSaveOrOpenBlob' in navigator){
window.navigator.msSaveOrOpenBlob(blob, fileName);
return;
}
let elink = document.createElement("a");
// 设置下载文件名
elink.download = payload.fileName || timestamp + ".xlsx";
elink.style.display = "none";
let blob = new Blob([content]);
elink.href = URL.createObjectURL(blob);
document.body.appendChild(elink);
elink.click();
document.body.removeChild(elink);
resolve();
}
};
reader.readAsText(content);
};
xmlResquest.send();
}));
}
或者
//文件地址 var url = '../aaa/bbb/模板.xlsx'; var xhr = new XMLHttpRequest(); xhr.open('get', url, true); xhr.responseType = "blob"; // 返回类型blob // 定义请求完成的处理函数,请求前也可以增加加载框/禁用下载按钮逻辑 xhr.onload = function() { // 请求完成 if(this.status === 200) { // 返回200 var blob = this.response; var href = window.URL.createObjectURL(blob); //创建下载的链接 //判断是否是IE浏览器,是的话返回true if (window.navigator.msSaveBlob) { try { window.navigator.msSaveBlob(blob, '模板.xlsx') } catch (e) { console.log(e); } } else { // 谷歌浏览器 创建a标签 添加download属性下载 var downloadElement = document.createElement('a'); downloadElement.href = href; downloadElement.target = '_blank'; downloadElement.download = '模板.xlsx'; //下载后文件名 document.body.appendChild(downloadElement); downloadElement.click(); //点击下载 document.body.removeChild(downloadElement); //下载完成移除元素 window.URL.revokeObjectURL(href); //释放掉blob对象 } } } // 发送ajax请求 xhr.send()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)