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

2023-10-27

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

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

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

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

npm install file-saver
npm install jszip

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

import JSZip from "jszip";
import FileSaver from "file-saver";

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

data() {
  return {
    fileList: [
      {
        name: 'logo1',
        url: 'https://duanqinghua.com/logo.png'
      },
      {
        name: 'logo2',
        url: 'http://sharedbk.com/logo.png'
      }
    ]
  }
}

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

// 点击下载
download() {
  var blogTitle = `下载文件名字`; // 下载后压缩包的命名
  var zip = new JSZip();
  var promises = [];
  let cache = {};
  let arrImg = [];
  for (let i = 0; i < this.appData.resources.length; i++) {
    arrImg.push({
      path: this.appData.resources[i].url, // 文件链接
      name: this.appData.resources[i].name // 文件名称
    });
  }
  for (let item of arrImg) {
    // item.path为文件链接地址
    const promise = this.getImgArrayBuffer(item.path).then((data) => {
      // 下载文件, 并存成ArrayBuffer对象(blob)
      zip.file(item.name, data, { binary: true }); // 逐个添加文件
      cache[item.name] = data;
    });
    promises.push(promise);
  }
  Promise.all(promises).then(() => {
    zip.generateAsync({ type: "blob" }).then((content) => {
      // 生成二进制流
      FileSaver.saveAs(content, blogTitle); // 利用file-saver保存文件  自定义文件名
    });
  }).catch((res) => {
    alert("文件压缩失败");
  });
},
//文件以流的形式获取(参数url为文件链接地址)
getImgArrayBuffer(url) {
  return new Promise((resolve, reject) => {
    //通过请求获取文件blob格式
    let xmlhttp = new XMLHttpRequest();
    xmlhttp.open("GET", url, true);
    xmlhttp.responseType = "blob";
    xmlhttp.onload = function () {
      if (this.status == 200) {
        resolve(this.response);
      } else {
        reject(this.status);
      }
    };
    xmlhttp.send();
  });
}

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

 

 

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 如何在响应式设计中禁用缩放功能?

    在使用 iPad iPhone 和 或其他智能手机时 如何禁用响应式设计页面中的放大和缩小功能 有什么办法可以控制吗 创建 META 视口标签 并设置用户可扩展属性为 否 如下所示 更新的答案
  • 如何在 Quill(富文本编辑器)中检测和修剪前导/尾随空格?

    如何检测并删除前导 尾随空格Quill https quilljs com 哪个是富文本编辑器 例如 样本HTML下面代表Quill文本的输出 nHi 我们想要检测并删除由以下命令创建的每个文本块的前导和尾随空格Quill 不适用于整个文档
  • 带有透明边框的响应式箭头进度条

    我正在尝试构建一个进度条 如结帐中常见的那样 问题是 箭头之间的边界是透明的 整个事情应该是反应灵敏 到目前为止我已经明白了 http codepen io MrBamblele pen rVBeoz http codepen io MrB
  • 我应该清理 Markdown 吗?

    对于我的帖子实体 我将 HTML 和 MARKDOWN 存储在数据库中 HTML 是从 MARKDOWN 转换而来 HTML 用于在页面上呈现 MARKDOWN 用于编辑功能 使用 WMD 我在存储到数据库之前清理 HTML 问题是 我也应
  • 使用 CSS 显示 div 内容后淡出

    我正在尝试在单击按钮时显示通知 单击按钮实际上会检查电子邮件验证 我知道要显示一个包含错误消息内容的 div 但是 我想淡出错误消息 比如说 5 秒后 我想用CSS来实现它 以下是我的尝试 它只是隐藏了一切 signup response
  • HTML/CSS 水平导航子菜单悬停显示错误

    我正在创建一个带有水平导航和垂直子菜单的 HTML 页面 一切工作正常 除了子菜单上的悬停显示在实际菜单项的左侧 看我的jsfiddle https jsfiddle net qmcte349 https jsfiddle net qmct
  • 如何为带有标题图像的移动设备设置 HTML,该图像占据浏览器的整个宽度?

    我担心的是我必须为移动设备建立一个网站 概念中是将图像设置为标题 现在的问题是 不同的智能手机具有不同的显示分辨率 有例如840x560 480x320 或 800x480 我必须编写什么元标签 CSS 等才能使 每个 现代智能手机中的图像
  • 如何使h1标签以其实际宽度居中

    我需要使 h1 标签居中 还需要在其周围制作边框 为了防止占用更多宽度 我给出display inline block但标签没有响应text align center then h1 text align center border 1px
  • Chrome 不渲染
    标签,FF 渲染

    我有一个非常烦人的问题 我的网站有一个表单 可以在 Firefox 中运行 但不能在 IE 或 Chrome 中运行 它是用 WordPress 的 Gravity Forms 制作的 但这可能与该问题无关 因为另一个表单插件也出现了同样的
  • 关闭 Bootstrap 模式 onclick

    我使用 Bootstrap 模式让用户在将商品添加到购物车之前选择产品选项 我之前在这种情况下使用过它们 没有任何问题 但这个没有按预期关闭 当用户单击 添加到购物车 按钮时 会发生一些事情 我认为问题就在那里 首先 一些脚本检查某些字段是
  • 标题的固定高度和更改宽度(HTML 表格)

    我需要确保表格标题的高度是固定的 并且宽度是根据标题单元格内容进行调整的 标题文本最多显示两行 我们如何使用样式来做到这一点 另外 我想确保表行的宽度与标题行的宽度相同 即标题行决定宽度 注 目前 交易部门负责人别名 是按行排列的 它需要分
  • 文本区域值高度[重复]

    这个问题在这里已经有答案了 我有一个 textarea 其 css 高度设置为 85px 用户可能会在该文本区域内键入内容行 我想知道文本 值的高度 而不是文本区域本身 有没有办法检查内部文本的高度 包括换行符 我会将文本区域的内容复制到另
  • FPDF - 内嵌粗体文本

    我正在尝试从 PHP 创建 PDF 出于法律原因 我们需要将免责声明的一部分设为粗体 并且需要概述免责声明 我当前的代码使用 if isset POST optout POST optout yes pdf gt Ln 5 pdf gt S
  • 从 firebase 数据库获取最高分值

    在我的网站上有一些我从 firebase 获得的电影 电影的分数在0到100之间 我已经在我的网站上找到了所有电影 我还想按降序显示它们 例如评分最高的 5 部电影 我怎样才能实现这一点 感谢您的回答 const app initializ
  • 在 HTML TextArea 中设置(或读取)光标/插入符的值

    我正在尝试 但失败了 在 HTML 文本区域中实现拖放机制 使用 jQuery 或 Scriptaculous 我们都使用 拖放机制相对容易 因此我愿意接受使用这两者之一的答案 问题是 我似乎找不到读取或设置插入点的方法 我最终想要做的是确
  • 使用时间序列数据和scaleBand指定D3条形图上的刻度

    我尝试为具有时间序列数据的 d3 v4 条形图指定多个刻度和多个刻度标签 如下图所示 基于本教程 https bl ocks org zigahertz 1ee4965ff76514517bb7ce6af21e5d44我有一个处理时间序列数
  • 如何使单词中的每个字母在悬停时发生变化

    假设我的网站上某个段落中有一个单词 IamGreat 我希望它在悬停时更改为 Good4you 但是 我不想更改整个单词 而是希望每个字母单独更改 因此 如果我将鼠标悬停在字母 I 上 它将变成字母 G 字母 r 将变成数字 4 等 这两个
  • 适用于 HTML5 混合应用程序的 CORS

    我读过很多关于 CORS 的文章 以及允许 Access Control Allow Origin 如何成为 Web 服务器的安全漏洞 但没有一篇文章解释了如何允许 HTML5 混合应用程序访问某些不允许使用通配符 的域上托管的 Web 服
  • 使用js获取选择选项的onclick事件

    我有一个非常令人沮丧的问题 我有这个代码 它过滤掉我的结果并将它们输入到选择框中 var syn
  • HTML:JavaScript:阻止表单提交并调用 Javascript 函数

    我想在按下表单中的提交按钮时进行 AJAX 调用 事实上我无法删除

随机推荐

  • SSM框架的流程及优点

    SSM框架 SSM Spring SpringMVC MyBatis 框架集由Spring MyBatis两个开源框架整合而成 SpringMVC是Spring中的部分内容 在这个快速发展的互联经济的时代 SSM框架提高了开发人员的工作效率
  • 查询topn的另一种方法通过orderby排序后利用limit来实现

    文章目录 前言 1 热身题实践 其他 前言 一直有个想法 把面试需要的知识点全都总结一下 包括数据库 语言 算法 数据结构等知识 形成一个面试总结笔记 这样以后面试的时候只看这些文章回顾下就行了 今天就先总结下Mysql的面试热身题吧 后续
  • HBase运维中遇到的问题

    1 PleaseHoldException Master is initializing hadoop 3 2 1 hbase 2 2 5 各种配置之后 出现的错误具体为 进去 hbase shell 之后 出现 hbase main 00
  • C#协变

    namespace 协变 public class Animal public string name public Animal string name1 name name1 public class dog Animal public
  • 【vue】vue 中插槽的三种类型:

    文章目录 一 匿名插槽 二 具名插槽 三 作用域插槽 一 匿名插槽
  • CSS学习笔记——搭建京东购物车网页

    大家好 作为一名互联网行业的小白 写博客只是为了巩固自己学习的知识 但由于水平有限 博客中难免会有一些错误出现 有不妥之处恳请各位大佬指点一二 博客主页 链接 https blog csdn net weixin 52720197 spm
  • elasticsearch心得记录-搭建到使用过程中

    1 es评分机制 使用场景 匹配多个关键词的时候 增加其中某个关键词的权重 增加其评分 搜索出来即可排到前面 评分默认为倒叙排 2 es基础的增删改查 搜索 search type dfs query then fetch 每个分片会根据
  • 条码规范——Code 93

    CODE 93 BACKGROUND INFORMATION Code 93 was designed to complement and improve upon Code 39 Code 93 is similar in that it
  • 在线代码测试小项目

    小项目 代码在线测试 http是我们生活中最常使用的协议 现如今网络浏览器越来越贴近人们的生活 使得做什么事都很方便 但是想要运行一段代码还得需要在电脑指定的环境下来运行 这在有些情况下让人很抓狂 我在网上也看到过很多代码在线测试的网页 感
  • 模块打包器Webpack详解!

    Webpack 1 什么是Webpack Webpack 是一个前端资源加载 打包工具 它将根据模块的依赖关系进行静态分析 然后将这些模块按照指定的规则生成对应的静态资源 从图中我们可以看出 Webpack 可以将多种静态资源 js css
  • 关于c语言main函数中int argc,char **argv的理解

    关于c语言main函数中int argc char argv的理解 c语言main函数通常形如int main int argc char argv 那么argc和argv代表啥呢 其实 argc表示传入main函数的参数的个数 而argv
  • Spark【Spark SQL(四)UDF函数和UDAF函数】

    UDF 函数 UDF 是我们用户可以自定义的函数 我们通过SparkSession对象来调用 udf 的 register name String func A1 A2 A3 方法来注册一个我们自定义的函数 其中 name 是我们自定义的函
  • MATLAB机器学习方法之朴素贝叶斯算法

    朴素贝叶斯分类算法的核心算法是 或 而如果所有特征都相互独立的话 P 特征 类别k 可以看作 P 特征1 类别k P 特征2 类别k P 特征3 类别k P 特征n 类别k 那么分别计算P 特征 类别1 P 特征 类别2 P 特征 类别3
  • paddlenlp二分类引入评估召回率F1指标 paddle.metric Accuracy

    每个具体的参数代表什么 明确好 无非就是第几个样本 属于某个类别的概率 非常清晰 from paddlenlp metrics import AccuracyAndF1 paddle no grad def evaluate model c
  • 基础知识——BCD码

    十六进制转二进制 将每一位十六进制转化为4位二进制位即可 BCD码 将十进制的每一位转化为4位二进制位即可 转换方法都是将每一位转为4位二进制位 但是区别是一个对应的是十六进制 一个对应的是十进制 比如给出二进制数0101 0101 如果对
  • muduo Timestamp详解

    1 简介 Timestamp用于提供时间戳相关的工具函数 2 类与接口 string toString const 返回时间的字符串形式 例如1649224501 687051 string toFormattedString bool s
  • 在word中插入分页符,多出一行

    类似问题在网上也有多次提及 例如 1 ctrl enter进行分页 但是下一页开头总是多出一行 2 Word换页时 上一页多了一行看不见的行 影响下页的标题编辑 3 word2007分页出现问题 分后多出一行 删除了后面的格式没了 4 wo
  • 点双连通分量&边双联通分量详解

    文章目录 点双连通分量 前言 概念 性质 找割点 找点双 附赠题表 边双连通分量 概念 性质 找割边 找边双 做法1 做法2 题表 一点个人感想 点双连通分量 前言 由于点双和边双都是无向图里面的东西 所以下面的讲解都以图是无向图作为前提
  • 微信小程序之实现下拉刷新效果

    本文章将主要介绍微信小程序如何实现简单的下拉刷新效果的 代码简单明了 主要 api wx showLoading Object object 显示 loading 提示框 wx hideLoading Object object 关闭 lo
  • vue中实现文件批量打包压缩下载(以及下载跨域问题分析)

    上次做了一个选择多个数据生成多个二维码并下载 当时项目催的紧 就简单写了个循环生成二维码下载 一次性会下载很多文件 特别难整理 刚好这次项目又遇到类似这种功能 需要一次性批量下载多个文件 那么就安排下打包下载吧 需要用到的是file sav