本文章主要记录利用jszip实现文件批量下载图片,文档。mp3,视频(MP4)等文件,一般而言前端实现下载功能一般都是通过a链,这在下载单个文件的场景很实用,但如果是批量下载很多个文件,同样也可以用a链接实现但是当文件很多的时候浏览器下方会一下子弹出很多个单个文件,这个对于用户交互是不友好的,如下图所示(当然如果用户不吐槽,这种方式对于开发而言,是最简单快速的):

总结批量下载的一般实现方案:

1.借助后端,让后端大佬接口直接返回一个已经打包好的zip静态资源链接,前端获取链接直接下载;

2.利用如下所说的a链接方式,遍历列表,然后a链接下载;

3.利用jszip把所有文件下载到一个zip文件下载下来;

由于后端大佬没时间,所以就尝试在前端打包,实现过程如下:

1.先引入相关的npm包

npm i --save axios jszip file-saver

2. 核心代码如下:

  // 请求文件资源const getFile = useCallback((url: string) => {return new Promise((resolve, reject) => {axios({method: 'get',url,responseType: 'blob',}).then((data) => {resolve(data.data);}).catch((error) => {reject(error.toString());});});}, []);// 批量下载const patchDownload = useCallback(async () => {const zip = new JSZip();const imgsss: JSZip | null = zip.folder('批量下载');const promises: Promise<T>[] = [];data.forEach((item) => {const promise = getFile(item.download_url).then((data: any) => {// 下载文件, 文件名必须带有文件类型后缀const file_name = `${item.name}.${item.file_format}`;// 逐个添加文件imgsss?.file(file_name, data, { binary: true }); });promises.push(promise);});Promise.all(promises).then(() => {zip.generateAsync({ type: 'blob' }).then((content) => {// 生成二进制流,利用file-saver保存文件FileSaver.saveAs(content, '批量下载.zip');}).catch(()=>{// 如果有资源文件下载失败,就直接用a链接下载dataSource.forEach((item) => {File.download({ url: item.download_url, fileName: item.name });});});});}, [data, getFile]);

react——利用jszip实现文件批量下载并打包成zip文件相关推荐

  1. Java实现文件批量下载,打包成zip压缩包

       最近在做一个管理系统的项目,需要实现一个功能,就是批量下载文件,并打包成zip压缩包.    前端通过POST请求传来要下载的文件列表,Java代码实现如下: import java.io.Bu ...

  2. 图片批量下载并打包成zip

    需要引入两个js文件: <script src="__STATIC__/js/FileSaver.js"></script> <script src= ...

  3. 【java】 文件批量下载并压缩为zip压缩包

    [java] 文件批量下载并压缩为zip压缩包 java常用的压缩技术 java中常见实现压缩与解压 业务场景 代码实现 注意点 java常用的压缩技术 常见的压缩格式有很多种,例如:zip.rar. ...

  4. java实现word下载及打包成zip下载(单个文件、多个文件)

    最近,本人需求将实现word下载以及打包成zip进行下载(单个文件.多个文件)将最近自己学习到的知识点分享给大家 1.实现word模板(三个步骤,最终需要的是upload.ftl) 大家可以参考这篇文 ...

  5. php将文件夹打包zip文件,php将文件夹打包成zip文件

    php将文件夹打包成zip文件:function addFileToZip($path,$zip){ $handler=opendir($path); //打开当前文件夹由$path指定. while ...

  6. php 文件夹打包_php将文件夹打包成zip文件

    php将文件夹打包成zip文件:function addFileToZip($path,$zip){ $handler=opendir($path); //打开当前文件夹由$path指定. while ...

  7. php 复制文件夹并压缩到最小_php将文件夹打包成zip文件

    function addFileToZip($path,$zip){ $handler=opendir($path); //打开当前文件夹由$path指定. while(($filename=read ...

  8. java 把文件打包成zip文件_java将文件或是文件夹打包压缩成zip格式

    导读热词 下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. import java.io.BufferedInputStream; impo ...

  9. maven项目打包成zip文件

    1.添加Maven插件 pom.xml <!--maven自定义打包插件--><plugin><artifactId>maven-assembly-plugin&l ...

最新文章

  1. 中文详解phpmailer所有对象和属性
  2. Controller类的方法上的RequestMapping一定要写在Controller类里吗?
  3. Java虚拟机规范(目录)
  4. 简单子串查找--strstr的使用(ZCMU1108)
  5. 3.顶点外扩方法实现的描边shader
  6. pxe+kickstart 自动化部署linux操作系统
  7. 精通Android自定义View(十四)绘制水平向右加载的进度条
  8. [转]G++与GCC的区别
  9. sci的figure怎么做_如何制作科技论文中的Figure
  10. WASM 成为 HTML、CSS 与 JS 之后的第 4 门 Web 语言
  11. JavaScript权威指南笔记 - 1
  12. loss函数之L1Loss,MSELoss,SmoothL1Loss, HuberLoss
  13. python读取海康威视摄像头价格_OpenCV+海康威视摄像头的实时读取
  14. GIS开发进阶之路(十三) Activator和new的区别、GP工具输入参数问题、写入JObject到json文件、ArcGIS Server REST API、动态规划、贪心算法
  15. Spring Cloud Gateway源码系列之路由配置加载过程
  16. 一句代码让电脑定时重启,关机,取消关机
  17. Bty全国首个PHP宝塔,宝塔Bty分销系统 Bty3安装教程
  18. 【单片机毕业设计】【mcuclub-jj-003】基于单片机的八层电梯的设计
  19. php添加数组的键和值,php - 将php数组元素添加到数组中如何具有相同的键和值 - SO中文参考 - www.soinside.com...
  20. iOS开发系列--通讯录、蓝牙、

热门文章

  1. SGU 103 Traffic Lights【最短路】
  2. 项目视频讲解_360问答系统
  3. 使用pymupdf开发的pdf查看器-tkinter篇
  4. MATLAB 关联M,fig等文件
  5. 程序技巧:人民币大写转换,身份证识别等 ,经典收集!
  6. 《计算机应用基础》教案,《计算机应用基础》公开课教案
  7. 直播预告 | 基于层级超图匹配的图相似度学习网络
  8. java中默认是构造方法,只要类中显式地定义一个构造方法,那么Java默认的构造方法不再存在...
  9. Zotero 安装+Zotero插件+ipad同步
  10. 农业物联网平台数据中心研发历程