base64转文件流下载

base64转文件下载

  base64ToFile(fileByte, fileName) {
    // 下载文件
    var bstr = atob(fileByte);
    var n = bstr.length;
    var u8arr = new Uint8Array(n);
    while (n--) {
      u8arr[n] = bstr.charCodeAt(n);
    }
    let blob = new Blob([u8arr], {
      type: ""
    });
    if (window.navigator && window.navigator.msSaveOrOpenBlob) {
      window.navigator.msSaveOrOpenBlob(blob, fileName);
    } else {
      let downloadElement = document.createElement("a");
      let href = window.URL.createObjectURL(blob);
      downloadElement.href = href;
      downloadElement.download = fileName;
      document.body.appendChild(downloadElement);
      downloadElement.click();
      document.body.removeChild(downloadElement);
      window.URL.revokeObjectURL(href);
    }
  }
前端实现 base64 文件流下载有多种方法,以下为你介绍几种常见的实现方式: #### 导出 PDF 文件 当后端返回的是 base64 格式的 PDF 数据流时,可按如下方式处理: ```javascript // pdfbase 为 base64 的数据流 // 数据格式:data:application/pdf;filename=generated.pdf;base64,JVBERi0xLjMKJbrfrOAKMyAwIG9iago.... const imgUrl = this.pdfbase; const a = document.createElement('a'); a.href = imgUrl; a.setAttribute('download', '文件名'); a.click(); ``` 此方法是通过创建一个 `<a>` 标签,将其 `href` 属性设置为 base64 数据流,再设置 `download` 属性为文件名,最后模拟点击该标签实现文件下载 [^2]。 #### 导出 XLSX 文件 若要将 base64 字符串导出为 XLSX 文件并下载,可按以下步骤操作: 1. **创建工具函数文件**:在 `utils/base64ToFile.js` 文件中编写如下代码: ```javascript export const util = { // 创建一个 a 标签,并做下载点击事件 downloadFile: function(blob, fileName) { const link = document.createElement('a'); link.href = window.URL.createObjectURL(blob); link.download = fileName; // 此写法兼容可火狐浏览器 document.body.appendChild(link); const evt = document.createEvent('MouseEvents'); evt.initEvent('click', false, false); link.dispatchEvent(evt); document.body.removeChild(link); }, // 将 Base64 文件为 Blob buildBlobByByte: function(data) { const raw = window.atob(data); const rawLength = raw.length; const uInt8Array = new Uint8Array(rawLength); for (let i = 0; i < rawLength; ++i) { uInt8Array[i] = raw.charCodeAt(i); } return new Blob([uInt8Array]); }, // 二进制数组 生成文件 downloadFileByByte: function(data, fileName) { const blob = this.buildBlobByByte(data); this.downloadFile(blob, fileName); } }; ``` 2. **在页面中使用**:在需要使用的页面引入该工具函数并调用 `downloadFileByByte` 方法: ```javascript import { util } from 'utils/base64ToFile.js'; // 假设 base64Data 是后端返回的 base64 字符串 const base64Data = 'yourBase64Data'; const fileName = 'example.xlsx'; util.downloadFileByByte(base64Data, fileName); ``` 此方法先将 base64 字符串换为 `Blob` 对象,再通过创建 `<a>` 标签模拟点击实现文件下载 [^3]。 #### 后端返回 base64 文件流下载 当后端返回 base64 文件流时,前端可按以下方式处理: ```javascript downloadTemplate() { this.$API.downloadTemplate().then(({ data }) => { const binaryString = atob(data); // 解码 base64 字符串 const byteArray = new Uint8Array(binaryString.length); // 创建一个 Uint8Array for (let i = 0; i < binaryString.length; i++) { // 填充 Uint8Array byteArray[i] = binaryString.charCodeAt(i); // 获取每个字符的 Unicode 编码 } const blob = new Blob([byteArray], { type: 'application/vnd.ms-excel' }); // 创建 Blob 对象 const objectUrl = URL.createObjectURL(blob); // 创建 Object URL const a = document.createElement('a'); // 创建一个 <a> 元素 document.body.appendChild(a); // 将 <a> 元素添加到 DOM 中 a.style = 'display: none'; // 隐藏 <a> 元素 a.href = objectUrl; // 设置 <a> 元素的 href 属性为 Object URL a.download = '链路模板配置.xlsx'; // 设置 <a> 元素的 download 属性为文件名 a.click(); // 模拟点击 <a> 元素 }); } ``` 此方法先将 base64 字符串解码为二进制字符串,再将其换为 `Uint8Array`,接着创建 `Blob` 对象,最后通过创建 `<a>` 标签模拟点击实现文件下载 [^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值