话不多说,间接上菜,请各位大佬提出不同意见
/**
* @filename <string> 自定义的文件名
* @url <string> 下载地址
*/
export function renameDownloadFile(filename,url){
// 获取文件
getBlob(url).then(blob => {
// 保留文件
saveAs(blob, filename);
})
}
// 重命名下载
export function getBlob(url) {
// 创立 Promise 对象
return new Promise(resolve => {
// 创立 XMLHttpRequest 对象
const xhr = new XMLHttpRequest();
// 设置申请形式
xhr.open('GET', url, true);
// 设置响应类型
xhr.responseType = 'blob';
// 当申请实现时,触发 onload 事件
xhr.onload = () => {
// 如果响应状态码为 200,则解析响应
if (xhr.status === 200) {resolve(xhr.response);
}
};
// 发送申请
xhr.send();});
}
export function saveAs(blob, filename) {
// 如果反对 msSaveOrOpenBlob 办法,则应用 msSaveBlob 办法保留文件
if (window.navigator.msSaveOrOpenBlob) {navigator.msSaveBlob(blob, filename);
} else {
// 创立 a 标签
const link = document.createElement('a');
// 获取 body 元素
const body = document.querySelector('body');
// 设置 a 标签的 href 属性
link.href = window.URL.createObjectURL(blob);
// 设置 a 标签的 download 属性
link.download = filename;
// 当 a 标签被点击时,触发 onclick 事件
// fix Firefox
link.style.display = 'none';
body.appendChild(link);
// 点击 a 标签,触发 onclick 事件
link.click();
// 销毁 a 标签
body.removeChild(link);
// 开释 a 标签的 href 属性
window.URL.revokeObjectURL(link.href);
}
}