首页 > 其他分享 >vue实现使用JSZip批量下载图片

vue实现使用JSZip批量下载图片

时间:2024-05-06 16:35:40浏览次数:20  
标签:function canvas vue 批量 img base64 JSZip var 图片

 1 import JSZip from "jszip";
 2 import { saveAs } from 'file-saver';
 3 import $ from 'jquery'
 4 
 5 // jszip打包下载图片
 6 function saveImgZip(imgUrlArrs,typeTxt) {
 7     var imgUrlArr = []; // 图片列表
 8     imgUrlArr = imgUrlArrs
 9     var imgBase64 = {};//存放转成base64的图片,采用键值对形式就行存储,不采用数组。因为数组在异步中会导致存取数据的无序,数据混乱
10     var imgNameArr = [];  // 图片名称
11     var imageSuffix = []; // 图片后缀
12     for (var i = 0; i < imgUrlArrs.length; i++) {
13         let imgurl = decodeURIComponent(imgUrlArrs[i])
14         // 图片后缀
15         var suffix = imgurl.substring(imgurl.lastIndexOf("."));
16         imageSuffix.push(suffix);
17         //获取文件的名称
18         var startIndex = imgurl.lastIndexOf("/");
19         var endIndex = imgurl.lastIndexOf(".");
20         var fileName = imgurl.substring(startIndex + 1, endIndex);
21         console.log(fileName);
22         imgNameArr.push(fileName);
23     }
24     // 创建JSZip对象
25     var zip = new JSZip();
26     // 创建文件夹
27     var img = zip.folder("images");
28     // 读取图片返回base64
29     for (var i = 0; i < imgUrlArr.length; i++) {
30         getBase64(imgUrlArr[i],i).then(function (base64,index) {
31             imgBase64[index] = base64.substring(22);
32         }, function (err) {
33             console.log(err);
34         });
35     }
36     function downloadZip() {
37         setTimeout(function () {
38             if (imgUrlArr.length == Object.keys(imgBase64).length) {
39                 for (var i = 0; i < imgUrlArr.length; i++) {
40                     img.file(imgNameArr[i] + imageSuffix[i], imgBase64[i], { base64: true });
41                 }
42                 let zipfilename = `文件名批量下载_${Date.now()}.zip`
43                 zip.generateAsync({ type: "blob" }).then(function (content) {
44                     saveAs(content, zipfilename)
45                 });
46             } else {
47                 downloadZip();
48             }
49         }, 100);
50     }
51     downloadZip();
52 }
53 
54 //图片转base64; 传入图片路径,返回base64
55 function getBase64(img,index) {
56     function getBase64Image(img, width, height) {
57         var canvas = document.createElement("canvas");
58         canvas.width = width ? width : img.width;
59         canvas.height = height ? height : img.height;
60         var ctx = canvas.getContext("2d");
61         ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
62         var dataURL = canvas.toDataURL();
63         return dataURL;
64     }
65 
66     var image = new Image();
67     image.crossOrigin = 'Anonymous';
68     image.src = img;
69     /*
70     * deferred对象是一个延迟对象,意思是函数延迟到某个点才开始执行,改变执行状态的方法有两个(成功:resolve和失败:reject),
71     * 分别对应两种执行回调(成功回调函数:done和失败回调函数fail)
72     * */
73     var deferred = $.Deferred();
74     if (img) {
75         image.onload = function () {
76             // 执行成功回调
77             deferred.resolve(getBase64Image(image),index);
78         }
79         return deferred.promise();
80     }
81 }
82 export {
83     saveImgZip
84 }

引入包

npm install jszip
npm install file-saver

然后直接将上面的代码复制到js就行

调用方法

saveImgZip(imglist,'共享图库') imglist是图片地址集合

 

标签:function,canvas,vue,批量,img,base64,JSZip,var,图片
From: https://www.cnblogs.com/ghc520/p/18175289

相关文章

  • vue
    vue打包命令:vuerunbuildvue脚手架搭建:npminstall-g@vue/clinpminstall是用来安装项目中所需的所有依赖项的命令总的来说,@vue/cli是VueCLI的工具集,用于全局安装以便在命令行中使用,而@vue/cli-service是VueCLI的一个核心服务模块,用于在项目中执行开发任务。通常......
  • mysql 的常用批量更新
    批量更新inupdatetableNamesetcolumnName=valuewherecolumnNamein(value1,value2,value3);有局限性,限制了更新的属性值必须一致。如果不一致,需要分开写多个update语句。insertinto...onduplicatekeyupdateinsertintotableName(columnName1,columnName2)......
  • 入门学习Docker部署Vue+NetCore+MsSql
    最近vultr的主机经常忘了续租,导致账号被禁用,主机被删掉每次重新部署都忘了之前怎么弄的,要重新查好多资料每个月6美金的主机XShell连接主机IP先安装docker开启docker服务镜像容器tar文件 saveload dockerimagesdockercommitbuildDockerfilepull仓库 查看......
  • vue3 个人自适应配置方案
    ``使用插件"postcss-pxtorem":"^6.1.0",postcss.config.cjs文件配置module.exports={plugins:{autoprefixer:{overrideBrowserslist:["Android4.1","iOS7.1","Chrome>31......
  • 小伙伴说VuePress太简洁了,还有没有其他博客推荐?
    写在前面自从上一篇文章发出来之后,不少小伙伴开始用VuePress搭建自己的个人网站。如果小伙伴也想用VuePress零代码零成本搭建个人网站,可以看过来传送门......
  • *uniapp-vue3-ts项目配置eslint+prettier+husky
    代码检查工具:Eslint代码格式化工具:prettierhusky:Git客户端增加了钩子(hooks)功能,使得在特定阶段执行一系列流程,以保证每一个commit的正确性vscode安装插件:    安装eslint+prettier:npmi-Deslintprettiereslint-plugin-vue@vue/eslint-config-prettier@vu......
  • vue + Ant Design Vue 表格自定义勾选状态
     //勾选规则//1.勾选当前不勾联动选子级//2.勾选当前需要联动勾选父级//3.勾选当前取消需要联动取消子级和联动取消父级,如果存在平级则不取消父级<template><a-spin:spinning="state.spining"><div><a-modalref="mModal"id="mModal"class="partial......
  • Vue3 除了 keep-alive,还有哪些页面缓存的实现方案
    引言有这么一个需求:列表页进入详情页后,切换回列表页,需要对列表页进行缓存,如果从首页进入列表页,就要重新加载列表页。对于这个需求,我的第一个想法就是使用keep-alive来缓存列表页,列表和详情页切换时,列表页会被缓存;从首页进入列表页时,就重置列表页数据并重新获取新数据来达到列表......
  • 十分钟,带你了解 Vue3 的新写法
    本文的目的,是为了让已经有Vue2开发经验的 人 ,快速掌握Vue3的写法。因此, 本篇假定你已经掌握Vue的核心内容 ,只为你介绍编写Vue3代码,需要了解的内容。一、Vue3里 script 的三种写法首先,Vue3新增了一个叫做组合式api的东西,英文名叫CompositionAPI。因此Vue3......
  • vue-i18n的9以上的版本中@被用作特殊字符处理,直接用会报错
    vue3项目中使用vue-i18n的9以上的版本实现国际化,使用过程中出现报错:国际化使用 "validation.regExp.name":"仅允许输入字母、数字与_.@字符"报如下错误 Messagecompilationerror:Invalidlinkedformat1|仅允许输入字母、数字与_.@字符Messagecompilationerror:Un......