当前位置: 首页 > news >正文

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • AI如何改变科学与数学领域:陶哲轩演讲解析
  • 基于Yolov5_6.1、LPRNet、PySide6开发的车牌识别系统
  • 文字模型训练分析评论(算法实战)
  • C++从入门到起飞之——list模拟实现 全方位剖析!
  • 系统功能性能优化:从问题定位到解决方案的系统性分析
  • Shopify接口开发工具shopify-sdk踩坑
  • 零知识证明-椭圆曲线(五)
  • 虚拟机Linux(Centos7)系统静态IP设置
  • Vue3中的ref与reactive区别
  • 商家推广怎么利用C#发送视频短信
  • 如何限制docker使用的cpu,内存,存储
  • CSS选择器的魔法:探索:not-child()与:nth-child()
  • Vue3 reactive和ref
  • RateLimiter超时
  • 自建远程桌面RustDesk服务器(CentOS配置,保姆级案例)
  • 【前端学习】-粗谈选择器
  • 【知识碎片】第三方登录弹窗效果
  • Android Volley源码解析
  • iOS 系统授权开发
  • IP路由与转发
  • js正则,这点儿就够用了
  • Making An Indicator With Pure CSS
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • Swift 中的尾递归和蹦床
  • webpack项目中使用grunt监听文件变动自动打包编译
  • 欢迎参加第二届中国游戏开发者大会
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 聊聊flink的BlobWriter
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 事件委托的小应用
  • 数据结构java版之冒泡排序及优化
  • 我有几个粽子,和一个故事
  • 原生JS动态加载JS、CSS文件及代码脚本
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • Spring第一个helloWorld
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • #控制台大学课堂点名问题_课堂随机点名
  • (floyd+补集) poj 3275
  • (js)循环条件满足时终止循环
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (算法)硬币问题
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (原)Matlab的svmtrain和svmclassify
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • **《Linux/Unix系统编程手册》读书笔记24章**
  • .naturalWidth 和naturalHeight属性,
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .Net FrameWork总结
  • .NET I/O 学习笔记:对文件和目录进行解压缩操作
  • .NET MAUI学习笔记——2.构建第一个程序_初级篇
  • .NET MVC 验证码
  • .NET 同步与异步 之 原子操作和自旋锁(Interlocked、SpinLock)(九)