1. 使用如题所示浏览器通过A标签下载 必须将a标签插入body 否则不触发下载。
2.如果有浏览器语法兼容性问题,使用webpack babel打包兼容。
具体可参考:es6支持什么浏览器-前端问答-PHP中文网
下载文件一般方法,代码如下:
1.文件信息变量。
const fileUrl = "这是一个xml文件访问连接.xml";
const fileName = "我是文件名.xml";
2. 通过a标签下载文件。
function commonalink(blob, fileName) {
const href = window.URL.createObjectURL(blob);
const a = document.createElement("a");
a.style.display = "none";
a.href = href;
document.body.appendChild(a); 最新的firefox已经可以不添加这行代码下载文件了。
a.download = fileName;
a.click(); // 模拟在按钮上的一次鼠标单击。
a.remove();//下载完成需要移除辅助元素。
URL.revokeObjectURL(a.href); // 释放URL 对象
}
3. 获取文件流,这里有很多其他的转化方法,axios和fetch都可以转化。
const getFileStream = (url) => {
return new Promise((resolve, reject) => {
// 通过请求获取文件blob格式
const xhr = new XMLHttpRequest();
xhr.open("GET", url, true);
xhr.responseType = "blob";
xhr.onload = function () { (
if (this.status === 200) {
resolve(this.response);
} else {
reject(this.status);
}
};
xhr.send();
});
};
4.入口函数调用。
function downloadUrlToBlob(fileUrl, filename) {
// 通过文件url获取文件流blob
getFileStream(fileUrl).then((res) => {
commonalink(res, fileName);
});
}
downloadUrlToBlob
fileUrl, fileName);