前端下载文件为zip

该代码段提供了一个函数downloadZip,用于处理从后端获取的二进制文件流,创建Blob对象并根据不同浏览器的特性(Chrome,IE,Firefox)进行下载。方法接受文件流、文件名和文件类型作为参数,确保在不同环境下都能正确下载zip或rar文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

封装文件

/**
 * 下载压缩包文件
 * @param {blob} fileArrayBuffer 文件流
 * @param {String} filename 文件名称
 * @param {String} fileType 文件格式
 */
export const downloadZip = (fileArrayBuffer, filename, fileType) => {
  let data = new Blob([fileArrayBuffer], {
    type:
      fileType == "zip"
        ? "application/zip,charset=utf-8"
        : "application/x-rar-compressed,charset=utf-8",
  });
  if (typeof window.chrome !== "undefined") {
    // Chrome
    var link = document.createElement("a");
    link.href = window.URL.createObjectURL(data);
    link.download = filename;
    link.click();
    console.log(data);
  } else if (typeof window.navigator.msSaveBlob !== "undefined") {
    // IE
    var blob = new Blob([data], {
      type:
        fileType == "zip" ? "application/zip" : "application/x-rar-compressed",
    });
    window.navigator.msSaveBlob(blob, filename);
  } else {
    // Firefox
    var file = new File([data], filename, {
      type:
        fileType == "zip" ? "application/zip" : "application/x-rar-compressed",
    });
    window.open(URL.createObjectURL(file));
  }
};

使用

//后端返回二进制文件 直接调用方法即可下载 

 async downLoadFile() {
      let res = await commonFileManyDownloads({
        filePath: this.tableData.annex_addr,
      });
      downloadZip(res.data, "附件", "zip");
    },

其中  res.data为二进制文件流

### 实现前端接收并保存 ZIP 文件流 为了实现在前端通过 JavaScript 接收并保存来自服务器响应的 ZIP 文件流以触发浏览器下载,可以采用以下方法: #### 使用 XMLHttpRequest 处理二进制数据 当使用 `XMLHttpRequest` 发起请求时,可以通过设置 `responseType` 属性来处理不同类型的响应。对于 ZIP 文件这类二进制文件,应该将 `responseType` 设置为 `'blob'`。 ```javascript function downloadZipFile(url, filename) { var xhr = new XMLHttpRequest(); xhr.open('GET', url); xhr.responseType = 'blob'; // 声明返回的数据类型为 blob xhr.onload = function() { if (xhr.status === 200) { saveAs(new Blob([xhr.response], { type: "application/zip" }), filename); // 调用 FileSaver.js 的 saveAs 函数保存文件 } else { console.error("Failed to fetch the zip file"); } }; xhr.send(); } ``` 此代码片段展示了如何利用 `XMLHttpRequest` 对象发起 GET 请求获取 ZIP 文件,并将其作为 Blob 数据传递给第三方库(如 FileSaver.js),从而创建一个可点击链接让用户下载文件[^1]。 #### 利用 Fetch API 结合 URL.createObjectURL() 现代浏览器支持更简洁易读的 Fetch API 来代替传统的 XHR 方式。下面的例子说明了怎样借助 Fetch API 获取 ZIP 流并将之转换成对象 URL 进行下载操作。 ```javascript async function downloadZipUsingFetch(url, filename){ try{ const response = await fetch(url); if (!response.ok) throw Error(`HTTP error! status: ${response.status}`); const blob = await response.blob(); let link=document.createElement('a'); link.href=window.URL.createObjectURL(blob); link.download = filename; document.body.appendChild(link); link.click(); window.URL.revokeObjectURL(link.href); document.body.removeChild(link); }catch(error){ console.log('There was a problem with your request:',error.message); } } ``` 这段脚本定义了一个异步函数用于发送网络请求取得 ZIP 文件的内容,之后构建临时 `<a>` 元素并通过调用其 `.click()` 方法模拟用户交互行为完成自动下载过程。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值