当前位置: 首页 > news >正文

用JSZip,FileSaver 有现成cdn的http图片或者文件地址,弄成压缩包导出,解决如果文件名字都是一样的只导出一个图片或文件的方法

  1. 第一步先处理重名的数据 ,
    解决方法 :将相同名字的图片或文件后面加后缀数字作为区分
let arr = [{name:'图片一',url:'http://cdn'}, {name:'图片一',url:'http://cdn'}, {name:'图片二',url:'http://cdn'}]; // 创建一个对象来跟踪已经遇到的名称和它们的计数  
let nameCounts = {};  
// 遍历数组,并更新对象  
arr.forEach((obj, index) => {  // 如果当前对象的name在nameCounts中存在,说明是重名  if (nameCounts[obj.name]) {  // 增加计数,并更新对象的name属性,添加序号  obj.name = `${obj.name}(${nameCounts[obj.name]})`;  // 更新nameCounts中对应name的计数  nameCounts[obj.name]++;  } else {  // 如果name不存在于nameCounts中,则初始化为1(但实际上不会立即用到这个1)  nameCounts[obj.name] = 1;  }  // 注意:对于不重名的name,我们不会更改它们的name属性,也不会增加nameCounts中的计数  
});  
console.log(arr);  
// [ { name: '图片一(1)' }, { name: '图片一(2)' }, { name: '图片二' } ]
  1. 引入
import JSZip from "jszip";
import FileSaver from "file-saver";
  1. 点击导出按钮 ,压缩包导出
async down(){let zip = new JSZip();for (let i = 0; i < this.arr.length; i++) {let file = arr[i].url.split(".");let fileType = file[file.length - 1];const fileName = arr[i].name// 文件类型 DOC XLS 等等都可以加进来if (fileType.toLocaleUpperCase() === "PDF") {await this.getFile(this.arr[i].url).then((res) =>  zip.file(fileName, res, { binary: true }))} else { // 图片await this.getBase64Img(this.arr[i].url).then((res) => zip.file(fileName, res, { base64: true }));}zip.generateAsync({ type: "blob" }).then((content) => {let fileName = "批量导出.zip";FileSaver.saveAs(content, fileName);});}
},
getFile(url) {return new Promise((resolve, reject) => {this.$http({ method: "get" , url , responseType: "arraybuffer" }).then((data) => resolve(data.data)).catch((error) => reject("PDF加载失败:" + error));});
},
getBase64Img(url) {return new Promise((resolve, reject) => {var base64 = "";var img = new Image();img.setAttribute("crossOrigin", "Anonymous");img.onload = () => {base64 = this.canBase64(img);resolve(base64.split(",")[1]);};img.onerror = () => reject("加载失败"); // 这里可能会有跨域失败的问题,解决方案同上,url + 随机数img.src = url + "?t=" + new Date().getTime();});
},
canBase64(img) {var canvas = document.createElement("canvas");canvas.width = img.width;canvas.height = img.height;var ctx = canvas.getContext("2d");ctx.drawImage(img, 0, 0, img.width, img.height);var dataURL = canvas.toDataURL("image/png");return dataURL;
}

相关文章:

  • 定位OOM(Out of Memory)
  • 如何指定Microsoft Print To PDF的输出路径
  • 一键搞定长图处理:高效精准,轻松实现按固定高度像素切割
  • java TCP服务器与客户端通信示例
  • laravel对接百度智能云 实现智能机器人
  • Docker使用daocloud镜像加速
  • 基于python的随机森林回归预测+贝叶斯优化超参数前后训练效果对比
  • 1.k8s:架构,组件,基础概念
  • 和小红书一起参会! 了解大模型与大数据融合的技术趋势
  • 后台运行大师:HarmonyOS 3.0中如何轻松设置APP常驻后台
  • 左耳听风_030_29_推荐阅读分布式数据调度相关论文
  • Vue.js有哪些优点和缺点
  • Redis-实战篇-什么是缓存-添加redis缓存
  • 安卓应用开发学习:通过腾讯地图SDK实现定位功能
  • 在Spring Boot项目中引入本地JAR包的步骤和配置
  • [LeetCode] Wiggle Sort
  • Android开源项目规范总结
  • CSS 专业技巧
  • express + mock 让前后台并行开发
  • HTTP 简介
  • JavaScript新鲜事·第5期
  • ucore操作系统实验笔记 - 重新理解中断
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • XML已死 ?
  • 阿里云Kubernetes容器服务上体验Knative
  • 创建一种深思熟虑的文化
  • 规范化安全开发 KOA 手脚架
  • 聊聊hikari连接池的leakDetectionThreshold
  • 入手阿里云新服务器的部署NODE
  • 王永庆:技术创新改变教育未来
  • 怎么将电脑中的声音录制成WAV格式
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • Java性能优化之JVM GC(垃圾回收机制)
  • ​520就是要宠粉,你的心头书我买单
  • ​你们这样子,耽误我的工作进度怎么办?
  • #QT(智能家居界面-界面切换)
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (07)Hive——窗口函数详解
  • (2)(2.10) LTM telemetry
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (C语言)fread与fwrite详解
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (二)Linux——Linux常用指令
  • (二)构建dubbo分布式平台-平台功能导图
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • (四)linux文件内容查看
  • (四)汇编语言——简单程序
  • .Net OpenCVSharp生成灰度图和二值图
  • .net反编译工具
  • .net项目IIS、VS 附加进程调试
  • .net中应用SQL缓存(实例使用)