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

本文主要是介绍[vue] jszip html-docx-js file-saver 图片,纯文本 ,打包压缩,下载跨域问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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/imagethis.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/imagethis.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中实现文件批量打包压缩下载(以及下载跨域问题分析)

这篇关于[vue] jszip html-docx-js file-saver 图片,纯文本 ,打包压缩,下载跨域问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1115321

相关文章

Vue3 的 shallowRef 和 shallowReactive:优化性能

大家对 Vue3 的 ref 和 reactive 都很熟悉,那么对 shallowRef 和 shallowReactive 是否了解呢? 在编程和数据结构中,“shallow”(浅层)通常指对数据结构的最外层进行操作,而不递归地处理其内部或嵌套的数据。这种处理方式关注的是数据结构的第一层属性或元素,而忽略更深层次的嵌套内容。 1. 浅层与深层的对比 1.1 浅层(Shallow) 定义

JS常用组件收集

收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: Lodash 页面固定: stickUp、jQuery.Pin 轮播: unslider、swiper 开关: switch 复选框: icheck 气泡: grumble 隐藏元素: Headroom

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

【 html+css 绚丽Loading 】000046 三才归元阵

前言:哈喽,大家好,今天给大家分享html+css 绚丽Loading!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 📚一、效果📚二、信息💡1.简介:💡2.外观描述:💡3.使用方式:💡4.战斗方式:💡5.提升:💡6.传说: 📚三、源代码,上代码,可以直接复制使用🎥效果🗂️目录✍️

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

好题——hdu2522(小数问题:求1/n的第一个循环节)

好喜欢这题,第一次做小数问题,一开始真心没思路,然后参考了网上的一些资料。 知识点***********************************无限不循环小数即无理数,不能写作两整数之比*****************************(一开始没想到,小学没学好) 此题1/n肯定是一个有限循环小数,了解这些后就能做此题了。 按照除法的机制,用一个函数表示出来就可以了,代码如下

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

hdu1565(状态压缩)

本人第一道ac的状态压缩dp,这题的数据非常水,很容易过 题意:在n*n的矩阵中选数字使得不存在任意两个数字相邻,求最大值 解题思路: 一、因为在1<<20中有很多状态是无效的,所以第一步是选择有效状态,存到cnt[]数组中 二、dp[i][j]表示到第i行的状态cnt[j]所能得到的最大值,状态转移方程dp[i][j] = max(dp[i][j],dp[i-1][k]) ,其中k满足c

常用的jdk下载地址

jdk下载地址 安装方式可以看之前的博客: mac安装jdk oracle 版本:https://www.oracle.com/java/technologies/downloads/ Eclipse Temurin版本:https://adoptium.net/zh-CN/temurin/releases/ 阿里版本: github:https://github.com/