[vue] jszip html-docx-js file-saver 图片,纯文本 ,打包压缩,下载跨域问题

news2024/9/22 17:35:39
npm install jszip file-saver
import JSZip from 'jszip';
import FileSaver from 'file-saver';

JSZip

创建JSZip实例:

const zip = new JSZip();

创建文件:支持导出纯文本

zip.file("hello.txt", "Hello World\n");

创建文件夹:

zip.folder("file")

只压缩有地址的文件

// 举个栗子

const dataList = [
    {
        fileUrl: 'https://www.xxx.com/data/data_service/20210429/144b4b1e4e457485c10fed54b8bc8d48.docx',
        fileName: '文件一'
    },
    {
        fileUrl: 'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg',
        fileName: '图片1'
    },
    {
        fileUrl: 'https://......docx',
        fileName: '文件二'
    },
    {
        fileUrl: 'https://......txt',
        fileName: '文件三'
    },
    {
        fileUrl: 'https://......jpg',
        fileName: '文件四'
    },
];
// 下载全部附件-压缩包
downloadBtn() {
  const blogTitle = '全部附件'; // 下载后压缩包的名称
  const zip = new JSZip();
  const promises = [];

  // 处理 docx/image
  this.dataList.forEach((item) => {
    const promise = this.getBlob(item.fileUrl).then((data) => {
      // 下载文件, 并存成ArrayBuffer对象(blob)
      zip.file(item.fileName, data, { binary: true }); // 逐个添加文件
    });
    promises.push(promise);
  });

  Promise.all(promises).then(() => {
    // 生成二进制流
    zip.generateAsync({ type: 'blob' }).then((blob) => {
      FileSaver.saveAs(blob, blogTitle); // 利用file-saver保存文件  blogTitle:自定义文件名
    });
  }).catch((res) => {
    this.$message.error('文件压缩失败');
  });
},
// 文件以流的形式获取(参数url为文件链接地址)
getBlob(url) {
  return new Promise((resolve) => {
    const xhr = new XMLHttpRequest();
    xhr.open('GET', url, true);
    xhr.responseType = 'blob';
    xhr.onload = () => {
      if (xhr.status === 200) {
        resolve(xhr.response);
      }
    };
    xhr.send();
  });
},

导出纯文本+图片

先使用html-docx-js库将HTML内容转换为Word文档

npm install html-docx-js
import htmlDocx from 'html-docx-js/dist/html-docx';
// 下载全部附件-压缩包
downloadBtn() {
  const blogTitle = '全部附件'; // 下载后压缩包的名称
  const zip = new JSZip();
  const promises = [];
  const htmlContent = `<span style="font-family:宋体; font-size:12pt">报告时间</span>`
  // 处理 Html文本
  if (htmlContent ) {
    const name = "11.docx";
    const blob = htmlDocx.asBlob(htmlContent);
    zip.file(name, blob, { binary: true }); // 创建文件
  }

  zip.file("Hello.txt", "Hello World\n"); // 支持纯文本等

   // 处理 docx/image
  this.dataList.forEach((item) => {
    const promise = this.getBlob(item.fileUrl).then((data) => {
      // 下载文件, 并存成ArrayBuffer对象(blob)
      zip.file(item.fileName, data, { binary: true }); // 逐个添加文件
    });
    promises.push(promise);
  });

  Promise.all(promises).then(() => {
    // 生成二进制流
    zip.generateAsync({ type: 'blob' }).then((blob) => {
      FileSaver.saveAs(blob, blogTitle); // 利用file-saver保存文件  blogTitle:自定义文件名
    });
  }).catch((res) => {
    this.$message.error('文件压缩失败');
  });
},

跨域:

点击下载后浏览器会报跨域问题,这个问题并非前端问题,需要后端在存储文件的服务器中设置允许跨域,添加 Access-Control-Allow-Origin 即可!

在这里插入图片描述

在这里插入图片描述


参考:

JS实现单个或多个文件批量下载的方法详解

前端批量获取文件并打包压缩解决方案

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2090954.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Leetcode3239. 最少翻转次数使二进制矩阵回文 I

Every day a Leetcode 题目来源&#xff1a;3239. 最少翻转次数使二进制矩阵回文 I 解法1&#xff1a;分别统计 先计算所有行变成回文最少需要翻转多少次。 也就是对于每一行 row&#xff0c;计算这一行变成回文最少需要翻转多少次。 也就是累加 row[j]!row[n−1−j] 的个…

Windows 11安装 MinGW-w64 教程

MinGW MinGW&#xff0c;全称“Minimalist GNU for Windows”&#xff0c;是一个提供在Windows操作系统上运行的GNU工具集的软件环境。它允许开发者使用GCC&#xff08;GNU Compiler Collection&#xff09;编译器来编译C和C程序&#xff0c;以及其他GNU工具&#xff0c;如GDB调…

【MySQL】字节跳动MySQL连环40问(网图)

本文首发于 ❄️慕雪的寒舍 字节MySQL连环40问&#xff0c;网图 虽然感觉这玩意和字节跳动没关系&#xff0c;但是管他的&#xff1f;直接开始回答&#xff01; 1.MySQL中有哪几种锁&#xff1f; 会的不全&#xff0c;所以查的GPT MySQL中有多种类型的锁&#xff0c;主要包括以…

【Python篇】Python 类和对象:详细讲解(中篇)

文章目录 Python 类和对象&#xff1a;详细讲解前言9. 方法重写&#xff08;Method Overriding&#xff09;9.1 为什么需要方法重写&#xff1f;9.2 方法重写的基本示例9.3 代码详解 10. 多继承&#xff08;Multiple Inheritance&#xff09;10.1 多继承的概念10.2 多继承的示例…

Springboot 大学生心理健康教育平台---附源码92334

目录 1 绪论 1.1 研究背景 1.2研究现状 1.3论文结构与章节安排 2 大学生心理健康教育平台分析 2.1 可行性分析 2.2 系统功能分析 2.3 系统用例分析 2.4 系统流程分析 2.5本章小结 3 大学生心理健康教育平台总体设计 3.1 系统功能模块设计 3.2 数据库设计 3.4本章小…

chapter09-OOP高级部分——(接口)——day13

目录 403-接口快速入门 404-接口基本介绍 405-接口应用场景 406-接口使用细节1 407-接口使用细节2​编辑 408-接口课堂练习 409-接口VS继承 410-接口多态特性 411-接口多态传递 412-接口课堂练习 403-接口快速入门 404-接口基本介绍 405-接口应用场景 406-接口使用细节…

unity shader 鼠标传入世界坐标到shader的练习

练习贴 c#代码 using System; using System.Collections; using System.Collections.Generic; using System.Linq; using UnityEngine;public class TestInputPosShader : MonoBehaviour {public Material material;const int arrayCount 2000;Vector4[] list new Vector4[a…

JavaWeb笔记整理10——JWT令牌、Filter、Interceptor

目录 1.简介 2.生成和校验 3.登录-生成令牌 4.过滤器Filter 快速入门 Filter执行流程 Filter拦截路径 过滤器链 登录校验Filter 流程 代码 5.拦截器Interceptor 快速入门 Interceptor拦截路径 执行流程 代码 继笔记04-session cookie 1.简介 2.生成和校验 /*…

利用Selenium和XPath抓取JavaScript动态加载内容的实践案例

引言 在当今的互联网时代&#xff0c;数据的获取和分析对于商业决策、市场研究以及个人兴趣都至关重要。然而&#xff0c;许多现代网站采用JavaScript动态加载技术来展示内容&#xff0c;这给传统的静态网页抓取方法带来了挑战。本文将通过一个实践案例&#xff0c;详细介绍如…

《中文Python穿云箭量化平台二次开发技术07》用Tkinter模块开发一个【股票K线行情及显示自编公式指标软件】示例

《中文Python穿云箭量化平台》是纯Python开发的量化平台&#xff0c;因此其中很多Python模块&#xff0c;我们可以自己设计新的量化工具&#xff0c;例如自己新的行情软件、新的量化平台、以及各种量化研究工具。 穿云箭自带指标公式源码运行模块&#xff0c;可以为其他量化平台…

Cesium源码解读之Viewer(全网最全)

今天我们来扒一扒cesium 的源码&#xff0c; 探寻一下底层的奥秘&#xff0c;我们平时工作中用的最多的应该就是var viewer new Cesium.Viewer(cesiumContainer);这句了但我们却很少去了解他底层是否如何实现的。 首先 我们可以通过Source/Cesium.js找到api 的入口 然后一步…

Vue3:通信组件

1.Props 父传子&#xff1a;直接传递需要获取的属性 子传父&#xff1a;需要借助函数&#xff0c;也就是方法&#xff0c;通过传递函数&#xff0c;子接着入参给函数&#xff0c;父调用函数即可获取到参数。 父&#xff1a; <template><div class"father&quo…

卡西莫多的诗文集2022-2024.8月定稿

通过网盘分享的文件&#xff1a;卡西莫多的诗文集2022-2024.8月30-A5.pdf 链接: https://pan.baidu.com/s/1_BrcKvUthFLlty8dWNZxjQ?pwdutwd 提取码: utwd 自从解锁了一项新技能后&#xff0c;从藏内容诗开始&#xff0c;自己积攒到现在不知不觉也积累了一些诗&#xff0c;看…

python模块06 mock-1基础用法

0 为什么要使用mock&#xff1f; 测试接口时&#xff0c;需要有对应的接口可以测试才行&#xff0c;否则要等后端开发完&#xff0c;才能进行&#xff0c; mock模块可以模拟后端接口返回数据&#xff0c;提前根据接口文档准备好后端的静态数据 1mock基础用法 下载&#xff…

M1 card crack

判断卡片类型 这张卡就是本次实现的对象 &#xff0c;一张废弃的校园卡&#xff0c;以下所有操作都以此卡展开 我们使用flipper的NFC功能扫描该卡片。我们直接read 我们得出最终结果该卡是M1 1K卡&#xff0c;也就是S50卡 。 Mifare 1卡是属于非接触式逻辑加密卡。MIFARE M…

锂电池基本知识与设计

目录 摘要 充电过程 18650规格书分享 摘要 应用&#xff1a;笔记本电脑、智能手机等设备。 优点&#xff1a;较高能量密度和较长使用寿命&#xff0c;放电率低&#xff0c;可进一步延长充电间隔时间。 缺点&#xff1a;过度充电或者放电会产生不可逆的损伤&#xff0c;性…

让PDF格式为LLM应用做好准备:探索Marker开源工具

在如今的大数据时代&#xff0c;高质量的数据可谓是LLM&#xff08;大语言模型&#xff09;应用成功与否的关键因素。然而&#xff0c;大多数文本数据通常以PDF格式存在。这不仅适用于企业文档&#xff0c;也包括个人文件。然而&#xff0c;对于LLM而言&#xff0c;处理PDF文件…

全局页面数据渲染--SAAS本地化及未来之窗行业应用跨平台架构

一、代码 /* 未来之窗通用数据渲染// 定义了一个名为"未来之窗_人工智能_前端口_数据渲染到界面"的函数 function 未来之窗_人工智能_前端口_数据渲染到界面(obj, 前置参数) {// 开启一个控制台分组&#xff0c;用于组织相关的输出信息console.group("未来之窗…

多参数遥测终端科技守护水电站生态流量下泄

随着我国水电事业的蓬勃发展&#xff0c;水电站在推动地方经济快速增长、缓解能源压力方面发挥了不可替代的作用。然而带来的生态环境问题日益凸显&#xff0c;因水电站下泄流量不足造成部分河段减水、脱水甚至干涸&#xff0c;影响了河流的正常生态功能和居民的生产、生活。因…

【 html+css 绚丽Loading 】 000027 旋风破云扇

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享htmlcss 绚丽Loading&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495…