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

纯前端批量下载

前言

批量下载导出的文件是压缩包,压缩包里头是图片即需要把数据都绘制成图片

工具库

jszip、file-saver

实践

方案1:

通过dom渲染再导出为压缩包

优点:容易更改

性能:数据量超过50条就很慢😓

    domtoimage.toJpeg(ref.current).then((url) => {const result = url.split(',')[1];batchDownload(result)});

方案2:

通过canvas绘制再导出压缩包

性能:实测600条数据转压缩包是2s左右,可以接受😁

缺点:有一定的技术成本,需要略懂canvas

创建canvas

    const createCanvas = () => {const canvas = document.createElement('canvas');const context = canvas.getContext('2d');const width = 300; const height = 400;canvas.width = width;canvas.height = height;context.fillStyle = '#fff';context.fillRect(0, 0, width, height);return {canvas,context,width,height}}

绘制文本

const drawText = ({ text, x, y, context, font, textAlign, fillStyle }) => {if (!context) return;context.fillStyle = fillStyle;context.font = font;context.textAlign = textAlign;context.fillText(text, x, y);
};

 绘制二维码

    const drawQrCode = ({x,y,text,width,context,}) => {qrCode.toCanvas(canvas, text, { width }, () => {context.drawImage(canvas, x, y);});}

异步处理并生成压缩包

const obj = {// ...数据
};
const zip = new JSZip();
const result = Array.from({ length: 600 }, () =>draw(obj).then((file) => {file;}),
);
const results = await Promise.all(result);
results.forEach(({ file }) => {zip.file(name, file, { base64: true });
});zip.generateAsync({ type: 'blob' }).then((content) => {saveAs(content, `batch.zip`);
});

最后

 纯前端实现批量下载大功告成啦😉!

http://www.dtcms.com/a/265979.html

相关文章:

  • Python 爬虫实战 | 国家医保
  • MySQL 8.0 OCP 1Z0-908 题目解析(16)
  • Part 0:射影几何,变换与估计-第三章:3D射影几何与变换
  • 爬虫经验分享:淘宝整店商品爬取全过程|API接口实战
  • 【数据结构】 map 和 set
  • stm32第十三天串口发送数据
  • 从0到1实战!用Docker部署Qwerty Learner输入法的完整实践过程
  • Dijkstra 算法#图论
  • MySQL JSON数据类型完全指南:从版本演进到企业实践的深度对话
  • Windows 上使用 vscode + mingw 调试 python 程序
  • 国内MCP服务平台推荐!aibase.cn上线MCP服务器集合平台
  • 二叉树的右视图C++
  • MySQL的窗口函数介绍
  • 每日算法刷题Day41 6.28:leetcode前缀和2道题,用时1h20min(要加快)
  • golang json omitempty 标签研究
  • 图论基础算法入门笔记
  • OOM电商系统订单缓存泄漏,这是泄漏还是溢出
  • 免费一键自动化申请、续期、部署、监控所有 SSL/TLS 证书,ALLinSSL开源免费的 SSL 证书自动化管理平台
  • 【进阶篇-消息队列】——RocketMQ如何实现事务的
  • HarmonyOS ArkTS卡片堆叠滑动组件实战与原理详解(含源码)
  • 如何挖掘客户的隐性需求
  • 474. 一和零
  • 【华为od刷题(C++)】HJ22 汽水瓶
  • ubuntu22 桌面版开启root登陆
  • ubuntu22.04安装anaconda
  • embbding you should know
  • 独立开发者软件出海:如何用Semrush高效洞察与增长
  • 【Note】《深入理解Linux内核》Chapter 10 :Linux 内核中的系统调用机制全解析
  • 贝叶斯深度学习:赋予AI不确定性感知的认知革命
  • 【Oracle学习笔记】8.函数(Function)