JSZip的使用,向前端发送Zip包

本文介绍了如何在前端利用JSZip库处理多个文件或数据,通过一次交互实现多次响应。首先通过npm安装JSZip,然后在后端利用buffer流将多个文件打包成Zip。通过设置响应头信息,将生成的Zip包以附件形式发送给前端。该方法绕过了浏览器的限制,实现了批量导出。
摘要由CSDN通过智能技术生成

JSZip的使用,向前端发送Zip包

业务场景

由于浏览器的自我保护机制,open.window只能发送一个请求,在此情况下需向前端发送多个文件或多个数据。即交互一次,多次响应。

引入

npm i jszip

前言

什么是buffer流?在传统的前端我们只需要做一些Unicode编码字符串处理,而在node中我们需要buffer来处理后端向前端传送的二进制数据。

后端JS代码(buffer流传输)

  generateExcelZip(`批量导出数据`, bufferZip, response) 
   //bufferZip为对象包含数组形式,其中包含buffer
  async generateExcelZip(fileName, buffer, response) {
    response.implicitEnd = false //将浏览器默认配置取消
    var zip = new JSZip()  //创建一个zip
    var zipFile = zip.folder(fileName)  //创建文件夹
    buffer.map((i, v) => {
      zipFile.file(`${i.excelName}.xlsx`, i.buffer)
    })
    zip.generateAsync({ type: 'nodebuffer' }).then((content) => {
      //设置头信息
      response.response.setHeader('Content-Type', 'application/zip')   //申明类型为zip
      response.response.setHeader('Content-Disposition', `attachment;filename=package.zip`)
      const bufferStrream = new PassThrough() 
      bufferStrream.end(content)
      bufferStrream.pipe(response.response)
    })
  }, 

后面还会持续更新,欢迎下方评论区留言,下期见

作者:琉璃Diaspora

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
如果你要在JSZip库中读取一个嵌套在zip文件中的zip文件,可以使用`file`方法读取该zip文件的二进制数据,然后使用`loadAsync`方法加载该zip文件。以下是一个示例代码: ```javascript // 导入JSZip库 import JSZip from 'jszip'; // 加载压缩文件 const zip = new JSZip(); zip.loadAsync(file) .then(zip => { // 读取zip文件中的zip文件 const zipData = zip.file('path/to/nested.zip').async('uint8array'); zipData.then(data => { // 加载嵌套在zip文件中的zip文件 const nestedZip = new JSZip(); nestedZip.loadAsync(data) .then(nestedZip => { // 读取zip文件中的文件 const fileData = nestedZip.file('path/to/file.txt').async('string'); fileData.then(data => { console.log(`读取到文件:path/to/file.txt,文件内容为:${data}`); }); }) .catch(error => { console.error('加载嵌套的zip文件失败:', error); }); }); }) .catch(error => { console.error('加载压缩文件失败:', error); }); ``` 在上述代码中,我们首先使用JSZip库加载压缩文件,并使用`file`方法获取嵌套在zip文件中的zip文件的二进制数据。然后,我们使用`loadAsync`方法加载该zip文件,并读取其中的文件。 需要注意的是,JSZip库中的`async`方法返回一个Promise对象,因此我们需要使用`then`方法来处理异步操作的结果。同时,需要注意对于嵌套的zip文件,我们需要先读取该zip文件的二进制数据,然后再使用JSZip库加载该zip文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

醒来就想躺

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值