Bash64转文件并下载
// 导出按钮
handleExport() {
this.$confirm('确认导出?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
let data = {...this.filters};
console.log(data);//return;
this.filtersing = true;
getOrdersExport(data).then(res => {
let bashToFile = res.data.datas;
console.log(bashToFile)
let downloadFileUrl = this.createDownloadFileUrl('order', bashToFile)
console.log(downloadFileUrl)
//下载文件
setTimeout(() => {
window.open(downloadFileUrl)
this.filtersing = false;
},100)
})
}).catch(() => {
});
},
Bash-64转文件方法:
// 生成Blob
dataURLtoFile(dataurl, filename) {
var arr = dataurl.split(',');
var mime = arr[0].match(/:(.*?);/)[1];
//atob() 方法用于解码使用 base-64 编码的字符串
var bstr = atob(arr[1]);
var n = bstr.length;
//Uint8Array 数组类型表示一个8位无符号整型数组,创建时内容被初始化为0。
//创建完后,可以以对象的方式或使用数组下标索引的方式引用数组中的元素。
var u8arr = new Uint8Array(n);
while (n--) {
//charCodeAt() 方法可返回指定位置的字符的 Unicode 编码
u8arr[n] = bstr.charCodeAt(n);
}
//js有一个底层的Blob对象,它是一个包含有只读原始数据的类文件对象。
//File对象就继承自Blob对象并扩展了系统文件的支持。
//Blob Blob(
// [optional] Array parts,
// [optional] BlobPropertyBag properties
//);
/**
*
* > https://www.jianshu.com/p/d175e6058b1b --- 引用
* 第一个参数是一个数组,里面可以是DOMString,也可以是TypeArray或者Blob。
* TypedArray:在JS语言中,数值只有一种称为Number的类型,
* 而不像其他后端语言一样, 区分是整型还是浮点型,是有符号的还是无符号的,
* 是32位的还是64位的。Typed Array的主要是为了弥补JS处理二进制格式数据的不足,
* 利用Typed Array可以非常方便地操作二进制的数据。
* TypedArray包括Int32Array、Uint8Array、Float32Array等,
* 也可以是连续的内存缓冲区ArrayBuffer或者工具类DataView。
* 第二参数是该文件的mime类型,不同的文件类型可以参考w3c的mime手册。
**/
return new Blob([u8arr], { type: mime });
},
createDownloadFileUrl(fileName, file) {
// application/zip 需要改成要下载文件的类型
const blob = this.dataURLtoFile(`data:application/zip;base64,${file}`, fileName);
//当前文件的最后修改日期
blob.lastModifiedDate = new Date();
blob.name = fileName;
//返回下载地址
return URL.createObjectURL(blob);
},
仅作为记录个人工作日常遇见的一些问题以及解决方案