base64 转文件并下载

1 篇文章 0 订阅
1 篇文章 0 订阅

方法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)
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值