首页 > 其他分享 >根据URL批量下载文件并压缩成zip文件

根据URL批量下载文件并压缩成zip文件

时间:2023-08-01 19:45:33浏览次数:36  
标签:文件 const zip URL fvName fileArr Promise

在这里插入图片描述
根据url批量下载图片或者视频,只需要将图片的url和名称放到数组对象即可,例如:

let fileArr = [
    {fvUrl:'https://image.xuboren.com/image/2023/07/26/1410829074764cdbaa4314a084eb749e.jpg',
    fvName: '图片名称'},
    {fvUrl:'https://image.xuboren.com/image/2023/07/26/49536f24f07b4d0eb0e43171019c5f1f.jpg',
    fvName: '图片名称2'}
]

将fileArr文件传入到下面的函数中

npm install jszip --save 

npm install file-saver --save

npm install axios
// loadZip.js
import JSZip from 'jszip'
import FileSaver from 'file-saver'
import axios from 'axios';

// 批量打包下载
// fileArr下载的list:例如:
const loadZip = async (fileArr, zipName = '下载文件') => {
  fileArr.forEach(el=>{
    el.fvName = `${el.fvName}.${el.fvUrl.split('.').at(-1)}`  // 截取url的后缀名添加到文件名: fvname.jpg
  })
  const zip = new JSZip() // 创建实例对象
  const promises = []
  // 遍历生成下载文件
  fileArr.forEach((item) => {
    const promise = getFile(item.fvUrl).then((res) => {
      const fvName = item.fvName + ''
      // 创建文件用file(),创建文件夹用 floder()
      zip.file(fvName, res.data, {
        binary: true
      })
    })
    promises.push(promise)
  })
 /** 
Promise.all() 静态方法接受一个 Promise 可迭代对象作为输入,并返回一个 Promise。当所有输入的 Promise 都被兑现时,返回的 Promise 也将被兑现(即使传入的是一个空的可迭代对象),并返回一个包含所有兑现值的数组。如果输入的任何 Promise 被拒绝,则返回的 Promise 将被拒绝,并带有第一个被拒绝的原因。

只有当all([p1, p2, p3]) 中的每一个 Promise 实例的状态都变成 fulfilled, Promise.all()的状态才会变成 fulfilled,此时  p1, p2, p3 的返回值组成一个数据,传给 Promise.all()的回调函数

只要 p1, p2, p3 中任何一个被 rejected,  Promise.all() 的状态就会变成 rejected,此时第一个被 rejected 的实例的返回值,会传给 Promise.all()的回调函数。
  	
在上面的代码中,promises 数组中的每一个元素,都是 Promise 实例,所以需要用到 Promise.all()
 */

  // 生成 zip 文件
  Promise.all(promiseAll).then(() => {
    // 生成zip 文件
    zip.generateAsync({
      type: 'blob',  // 文件格式
      compression: 'DEFLATE', // STORE: 默认不压缩, DEFLATE:需要压缩
      compressionOptions: {
        level: 9 // 压缩等级 1~9   1 压缩速度最快, 9 最优压缩方式
      }
    }).then((res) => {
      FileSaver.saveAs(res, `${zipName}.zip`) // 使用FileSaver.saveAs保存文件,文件名可自定义
    })
  })
}

// 这一步为下载文件步骤,通过传入的url下载文件
// 将文件 url 格式转换为 Bolb 类型格式 或者 arraybuffer 格式
const getFile = (fvUrl) => {
  return new Promise((resolve, reject) => {
    axios(fvUrl, {
      method: 'get',  // get请求
      responseType: 'blob' // 返回的数据会被强制转为blob类型 ,转换成arraybuffer 也行
    }).then((res) => {
      resolve(res) // 将下载的文件返回
    }).catch(err => {
      reject(err)
    })
  })
}

export default loadZip;

函数封装好后,在对应的页面引入该函数,然后将fileArr, zipName传入即可,例如:

// 需要使用的页面
// ...其他逻辑
loadZip(fileArr, zipName);

参考文章:https://blog.csdn.net/qq_41131745/article/details/128874556

标签:文件,const,zip,URL,fvName,fileArr,Promise
From: https://www.cnblogs.com/wang-fan-w/p/17598865.html

相关文章

  • GFS 分布式文件系统
    GFS分布式文件系统是在企业种完成高性能,高可用的功能,GFS分布式文件系统的意义在于为大规模分布式计算环境提供了一种高效可靠的文件存储解决方案,有助于提高系统的可用性、性能和可扩展性,同时保护数据的安全性和完整性。目录一、GlusterFS概述二、GlusterFS特点三、GlusterFS......
  • java 自定义读取properties配置文件属性
    把属性存到一个map里,并提供get方法,如果没有获取到值,则重新加载一遍配置文件,重新赋值,从而刷新数packagecom.aaa.demo.testProperties;importjava.io.IOException;importjava.io.InputStream;importjava.util.Enumeration;importjava.util.HashMap;importjava.util.Map;......
  • 电商curl编码请求,抓取天猫商品页面
    请求参数请求参数:num_iid=652874751412&is_promotion=1参数说明:num_iid:商品IDis_promotion:是否获取取促销价请求示例 测试入口 CurlPHPPHPsdkJAVAC#Pythoncurl-i"https://api-gw.onebound.cn/taobao/item_get/?key=<您自己的apiKey>&secret=<您自己的apiSecret>&num_iid......
  • 1688淘口令链接API接口-item_password-获得淘口令真实url 接口,淘口令API接口
    一、1688淘口令链接API接口-item_password-获得淘口令真实url接口,淘口令API接口代码如下:1.公共参数:名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)secretString是调用密钥(点击获取key和secret)api_nameString是API接口名称(包括在请求地址中)[item_search,item_get,......
  • 通过代码实现文件夹的创建以及文件的写入
     password为sudo的密码#include"include/rapidjson/stringbuffer.h"#include"include/rapidjson/writer.h"#include"include/rapidjson/document.h"#include<iostream>#include<string>#include<eigen3/Eigen/Dense......
  • 文件上传漏洞
    文件上传漏洞文件上传漏洞是指网络攻击者上传了一个可执行的文件到服务器并执行。这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等。这种攻击方式是最为直接和有效的,部分文件上传漏洞的利用技术门槛非常的低,对于攻击者来说很容易实施。文件上传漏洞本身就是一个危害巨大......
  • 无法访问org.springframework.context.annotation.Bean 错误的类文件:类文件具有错误
    Spring6和SpringBoot3不再支持Java8,最低版本为JDK17,请升级JDK>=17,同时IDEA>=2021.2长期使用的Java8,这次报错一直切换Spring依赖版本,没想到是Java太旧了,而且IDEA小于2021.2版本也不支持Java17来源SpringSecurity教程的源码,本地打开,各种依赖报错Error:(6,46)java......
  • Windows系统提示“telnet不是内部或外部命令,也不是可运行的程序或批处理文件”怎么办?
    Windows系统电脑/服务器在运行CMD命令提示符时提示“不是内部或外部命令,也不是可运行的程序或批处理文件”,遇到这种情况怎么办呢?今天多多和你们分享解决办法。解决方法启用Windows功能(演示的是Windows10系统)1、开始——控制面板——程序和功能2、启用或关闭Windows功能——勾选“T......
  • GOBUSTER - 目录/文件和DNS爆破工具。
    github:https://github.com/OJ/gobuster常用命令行选项-fw -使用通配符结果强制处理域。-np -隐藏进度输出。-m<mode>-使用哪种模式,dir或者dns(默认:) dir。-q -禁用横幅/下划线输出。-t<threads>-要运行的线程数(默认值:) 10。-u<url/domain> -完整URL(包括方案......
  • Java实现读取Excel文件并逐行写入到新的Excel文件中
    在日常开发中,经常需要处理Excel文件,其中一种常见的需求是将原始Excel文件的内容逐行写入到新的Excel文件中或者写入数据中。本篇博客将介绍使用Java编程语言以及ApachePOI库来实现这一功能。ApachePOI是一个开源的Java库,用于处理MicrosoftOffice格式的文件,包括Excel。1.环境......