vue 使用jszip将多个文件压缩下载压缩包

该代码段展示了如何利用axios获取文件的blob数据,并使用jszip库将这些文件打包成zip文件进行下载。它首先将文件URL列表拆分,然后逐个请求每个文件,将响应的blob数据添加到zip文件中,最后生成zip并使用file-saver库保存到本地。
require('script-loader!file-saver');
import JSZip from 'jszip'
import axios from 'axios'
export async function downloadZip(files,zipname){
  const zip = new JSZip()
  let list = files?files.split(','):[]
  for(let i = 0;i<list.length;i++){
    let file = list[i]
    console.log(file)
    //将文件读取,返回blob
    await axios({
      method: 'get',
      url: file,
      responseType: 'blob' // 因为我们想要的是blob格式的二进制数据 所以responseType这么设置
    }).then(async res => {
      console.log(res)
      let filename = file.split('/')||[]
      filename = filename[filename.length-1]
        //加入zip
      zip.file(filename, res.data,{blob: true})
    }) 
  }
  zip.generateAsync({
    type: "blob"
  }).then((blob) => {
    saveAs(blob, `${zipname}.zip`)
  }, (err) => {
    alert('导出失败')
  })
}

Vue应用中下载并合并多个文件压缩包通常涉及到前端处理和服务器配合。以下是一种常见的方法: 1. **前端处理**: - 使用JavaScript库,如axios、fetch或jQuery的`$.ajax`来异步下载每个文件。 - 当所有文件下载完成后,你可以将它们读取到内存中形成一个新的Blob对象,然后使用FileReader API将其转换成ArrayBuffer。 2. **文件流操作**: - 可能需要使用一些专门处理文件流的库,比如`stream.js`,来逐块读取文件内容,避免一次性加载过大文件导致浏览器崩溃。 3. **创建zip文件**: - 可以借助第三方库,例如`jszip`,将ArrayBuffer转换为Zip档案的二进制数据。 4. **下载合并后的文件**: - 最后,可以创建一个a标签或者使用`fetch`的`Response.arrayBuffer()`方法生成一个包含合并文件下载链接,用户点击后可以直接下载。 ```javascript // 示例代码 const axios = require('axios'); const fs = require('fs'); const jszip = require('jszip'); async function downloadAndCombineFiles(fileUrls) { const promises = fileUrls.map(url => axios.get(url).then(res => res.data)); const allFiles = await Promise.all(promises); // 将文件数组转为Blob let zipData = new Blob(allFiles); // 创建并压缩成新的Zip文件 const zip = new jszip(); zip.file("merged.zip", zipData, {type:"application/octet-stream"}); // 创建下载链接 const blobUrl = URL.createObjectURL(zip.generate({ type: "blob" })); const aLink = document.createElement('a'); aLink.href = blobUrl; aLink.download = 'merged.zip'; document.body.appendChild(aLink); aLink.click(); document.body.removeChild(aLink); } // 调用函数,传入文件url数组 downloadAndCombineFiles(['file1', 'file2', 'file3']); ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值