当前位置: 首页 > 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.lryc.cn/news/579580.html

相关文章:

  • CPT204-Advanced OO Programming: Sorting排序
  • 扣子空间PPT生产力升级:AI智能生成与多模态创作新时代
  • JS模块导出导入笔记 —— 默认导出 具名导出
  • 行波进位加法器 (Carry-Propagate Adder)
  • UE5 瞄准偏移(AimOffset)功能详解
  • 独立开发者软件出海:如何用Semrush高效洞察与增长
  • RJ45 连接器(水晶头)的引脚定义
  • 贪心专题练习
  • 强实时运动控制内核MotionRT750(一):驱动安装、内核配置与使用
  • 马斯克脑机接口(Neuralink)技术进展,已经实现瘫痪患者通过BCI控制电脑、玩视频游戏、学习编程,未来盲人也能恢复视力了
  • OpenEuler 24.03 用 Ansible 一键完成 SSH 互信 —— 从踩坑到最终方案
  • 站在 Java 程序员的角度如何学习和使用 AI?从 MVC 到智能体,范式变了!
  • 渗透测试中 phpinfo() 的信息利用分析
  • Part 0:射影几何,变换与估计-第三章:3D射影几何与变换
  • 工作中用到过哪些设计模式?是怎么实现的?
  • Robot---能打羽毛球的机器人
  • Linux操作系统之文件(二):重定向
  • 物联网MQTT协议与实践:从零到精通的硬核指南
  • 【王阳明代数】基于Perplexica二次开发的道装资源标识符与重定向知识路由系统
  • 使用HAProxy搭建Web群集:原理、步骤与实战总结
  • Node.js特训专栏-实战进阶:12. 数据库事务处理与并发控制
  • 基于 alpine 构建 .net 的基础镜像
  • 基于MATLAB的风力发电机无人机巡检路径优化研究
  • 利用人名语言分类案例演示RNN、LSTM和GRU的区别(基于PyTorch)
  • Go调度器的抢占机制:从协作式到异步抢占的演进之路|Go语言进阶(7)
  • Android Profiler 丢帧分析教程及案例
  • WPF学习笔记(22)项面板模板ltemsPanelTemplate与三种模板总结
  • 【Git】同时在本地使用多个github账号进行github仓库管理
  • 两级缓存 Caffeine + Redis 架构:原理、实现与实践
  • locate 命令更新机制详解