利用后端传来的base64数据转化成可视的work文件
项目要求是能下载一个work表格供填写,不过在尝试将后端数据 msSaveBlob 多次失败后,看了一下网上同类型的需求,提供了一个直接返回base64 ,由前端 blob 格式化的思路并最终实现了。
总体流程是将文件数据由后端转化成 base64,然后初始化内容,将每个元素均转换为 Uint8类型,再返回指定位置的字符的 Unicode 编码,接着将编码 Blob 化,指定其类型为 docx ,最后就是创建一个链接并将 blob 赋值进去生成文件。
记得添加请求头 responseType:'blob'
总体逻辑:
var myFile = this.createFile(response.data);
let execlName = this.viewData.select.applyBisName + '_' + this.viewData.select.projectName + '_' + '项目申请表' + '.docx';
if(navigator.appVersion.toString().indexOf(".NET")>0){
window.navigator.msSaveBlob(myFile, execlName);
} else {
var a = document.createElement("a");
a.href =window.URL.createObjectURL(myFile);
a.download = execlName;
a.click();
document.body.appendChild(a);
}
数据转换逻辑:
createFile(urlData) {
var bytes=window.atob(urlData),
n=bytes.length,
u8arr=new Uint8Array(n);
while(n--){
u8arr[n] = bytes.charCodeAt(n);
}
return new Blob([u8arr],{type:'application/vnd.openxmlformats-officedocument.wordprocessingml.document'})
}