今天遇到一个特别蛋疼的东西,需要做一个文件下载的功能,我请求接口后发现只给了一个base64格式的数据还有一个文件名。在网上翻了很久,决定把base64转成blob然后再下载。下面给实现
base64转blob
// dataurl为去掉了头的base64格式编码
dataURLtoBlob(dataurl) {
// 使用atob方法解码base64
var raw = window.atob(dataurl);
// 创建一个存储解码后数据的数组
var uInt8Array = new Uint8Array(raw.length);
// blob只能接收二进制编码,需要讲base64转为二进制再塞进去
for (var i = 0; i < raw.length; ++i) {
uInt8Array[i] = raw.charCodeAt(i);
}
// 这里给了一个返回值,在别的方法掉用传入base64编码就可以得到转化后的blob
return new Blob([uInt8Array], { type: "" });
},
blob下载
// 调用方法,拿到blob
let blob = this.dataURLtoBlob("base64编码");
// 创建一个a链接
var aTag = document.createElement("a");
// 给下载文件命名
aTag.download = val.ATTACHUSERFILE;
// 创建下载
aTag.href = URL.createObjectURL(blob);
// 开始下载
aTag.click();
URL.revokeObjectURL(blob);