vue3批量导出文件,打包成压缩包

1.下载插件

npm install jszip
npm install file-saver

2.封装方法

新建一个exportFileZip.js文件

// 引入实现下载压缩包的两个库
import JSZip from 'jszip';
import FileSaver from 'file-saver';
// 引入请求模块
import axios from 'axios'
// 实现下载压缩包按钮的方法 fileArr 需要下载的文件数组 exportName 导出的压缩包名 fileUrl 文件路径 fileName 文件名 
export function downloadZip(fileArr,exportName,fileUrl,fileName) {
  const zip = new JSZip();
  const promises = [];  // 用于存储多个promise
  const arr = fileArr.filter(item => item[fileUrl]!==''); // 将需要下载的文件路径存到数组中
  console.log('arr',arr);
  arr.forEach( item => { 
    const promise = new Promise((resolve, reject) => {
      // 实现下载单个文件
      axios ({
        url: item[fileUrl],
        method: 'GET',
        responseType: 'blob'
      }).then((res) => {          // request请求的状态
        resolve(res)
      }).catch((error) => {
        reject(error)
      })
    }).then((res) => {            
      // 单个文件下载成功,拿到内容命名后转为二进制存储
      const name = item[fileName];
      // 在此处可以设置压缩包文件夹  zip.file(文件夹名/文件名, 文件内容 ,{配置项});
      zip.file(name, res.data ,{binary: true});
    })
    // 将单个promise存到数组中,后续使用promise.all判断整体状态
    promises.push(promise);
  })
  Promise.all(promises).then(() => {
    // 将压缩包里的文件压缩,返回一个promise实例,成功结果res返回的就是压缩包
    zip.generateAsync({
      type: "blob",
      compression: "DEFLATE",  // STORE:默认不压缩 DEFLATE:需要压缩
      compressionOptions: {
        level: 9               // 压缩等级1~9    1压缩速度最快,9最优压缩方式
      }
    }).then((res) => {
      FileSaver.saveAs(res, exportName) // 利用file-saver保存文件
    })
  })
}

3.使用

import { downloadZip } from '@/utils/exportFileZip'; // 引入封装的方法

// 批量下载
const batchDown = () => {
  downloadZip(datas.fileData, '附件.zip', 'attachmentUrl', 'attachmentName');
};

说明:第一个参数(datas.fileData)是数组对象,存储着文件名和下载地址;

第二个参数是导出的压缩包名称

第三个参数是文件下载地址的属性名

第四个参数是文件名的属性名

第二个参数需要加上后缀名,第三、第四个参数是对应的属性名

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值