Vue实现文件批量打包压缩下载

 更新时间:2022年07月15日 10:31:46   作者:鹏仔工作室  
这篇文章主要为大家详细介绍了如何利用Vue实现文件批量打包压缩下载功能,文中的实现步骤讲解详细,感兴趣的小伙伴可以跟随小编一起了解一下

上次做了一个选择多个数据生成多个二维码并下载,当时项目催的紧,就简单写了个循环生成二维码下载,一次性会下载很多文件,特别难整理;

刚好这次项目又遇到类似这种功能,需要一次性批量下载多个文件,那么就安排下打包下载吧!

需要用到的是file-saver、jszip两个插件

首先,我们安装这两个插件,在控制台中依次输入下方命令执行

npm install file-saver
npm install jszip

上方依赖安装完成,我们在需要实现打包下载的页面中引入这两个插件

import JSZip from "jszip";
import FileSaver from "file-saver";

在data中,我就简单定义一个数组 fileList ,用来存放要下载的文件链接

data() {
  return {
    fileList: [
      {
        name: 'logo1',
        url: 'https://duanqinghua.com/logo.png'
      },
      {
        name: 'logo2',
        url: 'http://sharedbk.com/logo.png'
      }
    ]
  }
}

接着就是在 methods 中写下载事件了

// 点击下载
download() {
  var blogTitle = `下载文件名字`; // 下载后压缩包的命名
  var zip = new JSZip();
  var promises = [];
  let cache = {};
  let arrImg = [];
  for (let i = 0; i < this.appData.resources.length; i++) {
    arrImg.push({
      path: this.appData.resources[i].url, // 文件链接
      name: this.appData.resources[i].name // 文件名称
    });
  }
  for (let item of arrImg) {
    // item.path为文件链接地址
    const promise = this.getImgArrayBuffer(item.path).then((data) => {
      // 下载文件, 并存成ArrayBuffer对象(blob)
      zip.file(item.name, data, { binary: true }); // 逐个添加文件
      cache[item.name] = data;
    });
    promises.push(promise);
  }
  Promise.all(promises).then(() => {
    zip.generateAsync({ type: "blob" }).then((content) => {
      // 生成二进制流
      FileSaver.saveAs(content, blogTitle); // 利用file-saver保存文件  自定义文件名
    });
  }).catch((res) => {
    alert("文件压缩失败");
  });
},
//文件以流的形式获取(参数url为文件链接地址)
getImgArrayBuffer(url) {
  return new Promise((resolve, reject) => {
    //通过请求获取文件blob格式
    let xmlhttp = new XMLHttpRequest();
    xmlhttp.open("GET", url, true);
    xmlhttp.responseType = "blob";
    xmlhttp.onload = function () {
      if (this.status == 200) {
        resolve(this.response);
      } else {
        reject(this.status);
      }
    };
    xmlhttp.send();
  });
}

很多小伙伴复制完代码使用,点击下载后浏览器会报跨域问题,这个问题并非前端问题,需要后端在存储文件的服务器中设置允许跨域,添加 Access-Control-Allow-Origin 即可!

到此这篇关于Vue实现文件批量打包压缩下载的文章就介绍到这了,更多相关Vue文件打包压缩下载内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue element upload实现图片本地预览

    vue element upload实现图片本地预览

    这篇文章主要为大家详细介绍了vue element upload实现图片本地预览,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08
  • vue 解决addRoutes动态添加路由后刷新失效问题

    vue 解决addRoutes动态添加路由后刷新失效问题

    这篇文章主要介绍了vue 解决addRoutes动态添加路由后刷新失效问题,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • vant如何修改placeholder样式

    vant如何修改placeholder样式

    这篇文章主要介绍了vant如何修改placeholder样式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • VUE v-for循环中每个item节点动态绑定不同函数的实例

    VUE v-for循环中每个item节点动态绑定不同函数的实例

    今天小编就为大家分享一篇VUE v-for循环中每个item节点动态绑定不同函数的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-09-09
  • vue中使用@blur获取input val值

    vue中使用@blur获取input val值

    这篇文章主要介绍了vue中使用@blur获取input val值的实现方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • Vue中的vue-resource示例详解

    Vue中的vue-resource示例详解

    Vue与后台Api进行交互通常是利用vue-resource来实现的,本质上vue-resource是通过http来完成AJAX请求相应的。这篇文章主要介绍了Vue中的vue-resource示例详解,需要的朋友可以参考下
    2018-11-11
  • uniapp 获取系统信息的方法小结

    uniapp 获取系统信息的方法小结

    uni-app提供了异步(uni.getSystemInfo)和同步(uni.getSystemInfoSync)的2个API获取系统信息,系统信息返回的内容非常多,各操作系统、各家小程序、各浏览器对它们的定义也不相同
    2022-11-11
  • vue前后端分离如何解决每次请求session都会变的问题

    vue前后端分离如何解决每次请求session都会变的问题

    这篇文章主要介绍了vue前后端分离如何解决每次请求session都会变的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • vue嵌入第三方页面几种常见方法

    vue嵌入第三方页面几种常见方法

    在Vue中嵌入第三方页面可以采用多种方法,例如使用<iframe>、Vue插件、动态加载第三方脚本或WebComponents,不同方法适用于不同类型的内容和项目需求,如<iframe>适用于整个网页,而动态脚本和WebComponents适合特定功能,选择合适的方法可以有效整合外部资源
    2024-09-09
  • vue配置请求本地json数据的方法

    vue配置请求本地json数据的方法

    这篇文章主要介绍了vue配置请求本地json数据的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04

最新评论