当前位置:   article > 正文

vue中实现文件批量打包压缩下载(以及下载跨域问题分析)_vue批量下载文件

vue批量下载文件

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

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

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

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

  1. npm install file-saver
  2. npm install jszip

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

  1. import JSZip from "jszip";
  2. import FileSaver from "file-saver";

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

  1. data() {
  2. return {
  3. fileList: [
  4. {
  5. name: 'logo1',
  6. url: 'https://duanqinghua.com/logo.png'
  7. },
  8. {
  9. name: 'logo2',
  10. url: 'http://sharedbk.com/logo.png'
  11. }
  12. ]
  13. }
  14. }

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

  1. // 点击下载
  2. download() {
  3. var blogTitle = `下载文件名字`; // 下载后压缩包的命名
  4. var zip = new JSZip();
  5. var promises = [];
  6. let cache = {};
  7. let arrImg = [];
  8. for (let i = 0; i < this.appData.resources.length; i++) {
  9. arrImg.push({
  10. path: this.appData.resources[i].url, // 文件链接
  11. name: this.appData.resources[i].name // 文件名称
  12. });
  13. }
  14. for (let item of arrImg) {
  15. // item.path为文件链接地址
  16. const promise = this.getImgArrayBuffer(item.path).then((data) => {
  17. // 下载文件, 并存成ArrayBuffer对象(blob)
  18. zip.file(item.name, data, { binary: true }); // 逐个添加文件
  19. cache[item.name] = data;
  20. });
  21. promises.push(promise);
  22. }
  23. Promise.all(promises).then(() => {
  24. zip.generateAsync({ type: "blob" }).then((content) => {
  25. // 生成二进制流
  26. FileSaver.saveAs(content, blogTitle); // 利用file-saver保存文件 自定义文件名
  27. });
  28. }).catch((res) => {
  29. alert("文件压缩失败");
  30. });
  31. },
  32. //文件以流的形式获取(参数url为文件链接地址)
  33. getImgArrayBuffer(url) {
  34. return new Promise((resolve, reject) => {
  35. //通过请求获取文件blob格式
  36. let xmlhttp = new XMLHttpRequest();
  37. xmlhttp.open("GET", url, true);
  38. xmlhttp.responseType = "blob";
  39. xmlhttp.onload = function () {
  40. if (this.status == 200) {
  41. resolve(this.response);
  42. } else {
  43. reject(this.status);
  44. }
  45. };
  46. xmlhttp.send();
  47. });
  48. }

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

 

 

 围观地址 vue中实现文件批量打包压缩下载(以及下载跨域问题分析)上次做了一个选择多个数据生成多个二维码并下载,当时项目催的紧,就简单写了个循环生成二维码下载,一次性会下载很多文件,特别难整理;刚好这次项目又遇到类似这种功能,需要一次性批量下载多个文件,那么就安排下打包下载吧!需要用到的是file-saver、jszip两个插件首先,...,共享博客http://www.sharedbk.com/post/240.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/186946
推荐阅读
相关标签
  

闽ICP备14008679号