方法1
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<button id="exportBtn">导出</button>
</body>
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script>
var exportBtn = document.getElementById('exportBtn')
exportBtn.onclick = function () {
console.log(axios)
axios.get('http://xxxx').then(function ({data}) {
// data.content === 返回的base64
downloadFileByBase64(data.content, 'name.xlsx')
})
}
// 下载文件
const downloadFile = function (url, name) {
var a = document.createElement("a")
console.log(url)
a.setAttribute("href", url)
a.setAttribute("download", name)
a.setAttribute("target", "_blank")
let clickEvent = document.createEvent("MouseEvents");
clickEvent.initEvent("click", true, true);
a.dispatchEvent(clickEvent);
}
// base64转换
const dataURLtoBlob = function (base64Str) {
// 核心代码
var bstr = atob(base64Str), n = bstr.length, u8arr = new Uint8Array(n);
while (n--) {
u8arr[n] = bstr.charCodeAt(n);
}
return new Blob([u8arr], { type: 'application/vnd.ms-excel' }); // 文件对应type类型参照 见https://www.w3school.com.cn/media/media_mimeref.asp
}
// 方法调用
const downloadFileByBase64 = function (base64, name) {
var myBlob = dataURLtoBlob(base64)
var myUrl = URL.createObjectURL(myBlob)
downloadFile(myUrl, name)
}
</script>
</html>
不需要自己写下载方法,且兼容以下浏览器版本
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<button id="exportBtn">导出</button>
</body>
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script src="http://cdn.staticfile.org/FileSaver.js/1.3.8/FileSaver.min.js"></script>
<script>
var exportBtn = document.getElementById('exportBtn')
exportBtn.onclick = function () {
//base64str == 返回的base64str
downloadFileByBase64(base64str, 'name.xlsx')
// axios.get('http://xxxx').then(function ({data}) {
// downloadFileByBase64(data.content, 'name.xlsx')
// })
}
// base64转换
const dataURLtoBlob = function (base64Str) {
var bstr = atob(base64Str), n = bstr.length, u8arr = new Uint8Array(n);
while (n--) {
u8arr[n] = bstr.charCodeAt(n);
}
return new Blob([u8arr], { type: 'application/vnd.ms-excel' }); // 文件对应type类型参照 见https://www.w3school.com.cn/media/media_mimeref.asp
}
// 方法调用
const downloadFileByBase64 = function (base64, name) {
var myBlob = dataURLtoBlob(base64)
var myUrl = URL.createObjectURL(myBlob)
saveAs(myBlob, name)
}
</script>
</html>
项目中引用
export function downloadBase64File(base64,name) {
// 下载文件
const downloadFile = function(url, name){
var a = document.createElement("a")
console.log(url)
a.setAttribute("href",url)
a.setAttribute("download",name)
a.setAttribute("target","_blank")
let clickEvent = document.createEvent("MouseEvents");
clickEvent.initEvent("click", true, true);
a.dispatchEvent(clickEvent);
}
// base64转换
const dataURLtoBlob = function (base64Str) {
var bstr = atob(base64Str), n = bstr.length, u8arr = new Uint8Array(n);
while (n--) {
u8arr[n] = bstr.charCodeAt(n);
}
return new Blob([u8arr], { type: 'application/octet-stream' });
}
// 方法调用
const downloadFileByBase64 = function (base64,name){
var myBlob = dataURLtoBlob(base64)
var myUrl = URL.createObjectURL(myBlob)
downloadFile(myUrl,name)
}
downloadFileByBase64(base64, name)
}