# 前端 下载excel文件
downloadFile(fileData, fileName) {
let a = document.createElement("a");
//将通过 btoa() 等方法编码的字符串进行解码(base64格式)
let file = window.atob(fileData.fileData);
let len = file.length
// 创建初始化为 0 的,包含 length 个元素的无符号整型数组
let arr = new Uint8Array(len);
for (var i = 0; i < len; i++) {
//charCodeAt() 方法可返回指定位置的字符的 Unicode 编码
arr[i] = file.charCodeAt(i);
}
// 传入一个合适的类型如 excel ,并生成 blob 文件流
let blob = new Blob([arr], {
type: "application/vnd.ms-excel"
});
// 会产生一个类似 blob:d3958f5c-0777-0845-9dcf-2cb28783acaf 这样的 URL 字符串(blobUrl)
// 你可以像使用普通 URL 那样使用它,比如用在 img.src 上。
this.downloadUrl = window.URL.createObjectURL(blob);
let name = fileData.fileName || fileName
// 替换掉不需要的字符串
name.replace(
"attachment;filename*=utf-8'zh_cn'",
""
);
//将 blob 链接挂载到 a 标签上
a.setAttribute("href", this.downloadUrl);
//decodeURI() 用于解码 URI (一种标识网络资源的字符串,如:"商品信息导入模板.xls")
var reportName = decodeURI(name);
//a标签中设置文件下载
a.setAttribute("download", reportName);
a.click();
//释放自身
a=null
},
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
上传
let data = new FormData();
data.append("file", file);
listApi({
headers: {
"Content-Type": "multipart/form-data",
},
body: data,
})
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8