base64转二进制流文件
/**
* base64转二进制流
* @param {*} data base64
* @returns
*/
export function dataURLtoBlob(data) {
var arr = data.split(','),
mime = arr[0].match(/:(.*?);/)[1],
bstr = atob(arr[1]), //这边要取base64后面的数据
n = bstr.length,
u8arr = new Uint8Array(n);
while (n--) {
u8arr[n] = bstr.charCodeAt(n);
}
return new Blob([u8arr], { type: mime });
}
下载方法
/**
* 下载通过a链接
* @param {*} url base64
* @param {*} name 名字
* @param {*} type 后缀名
*/
export const downLoadBya = function (url, name = (+new Date()), type = 1) {
const link = document.createElement('a')
link.style.display = 'none'
console.log(dataURLtoBlob(url));
const objectUrl = window.URL.createObjectURL(dataURLtoBlob(url)) //这边获取后的blob要执行window.URL.createObjectURL
link.href = objectUrl
link.setAttribute('download', `${name}.${type ==1 ? 'png' : type==2? 'svg':'jpg'}`)
document.body.appendChild(link)
link.click()
document.body.removeChild(link)
}
参考链接:https://juejin.cn/post/6844903700222181384
https://blog.csdn.net/cdy_1/article/details/126989107
后台返回文件流下载zip文件
1、请求的时候要加上
responseType: ‘blob’
this.$axios({
method: 'get',
url: `/file/downloadZip`,
responseType: 'blob'
})
2、下载方法
dewnLoadZip(res) {
// res 下载转blob二进制或文本数据
let blob = new Blob([res], { type: "application/zip" });
console.log("导出的blob", blob);
let url = window.URL.createObjectURL(blob);
const link = document.createElement("a"); // 创建a标签
link.href = url;
link.download = `下载名称`; // 重命名文件
link.click();
URL.revokeObjectURL(url); // 释放内存
},