设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间00 现在时间00 缓存数据 对自己狠一点,逼自己努力,再过几年你将会感谢今天发狠的自己、恨透今天懒惰自卑的自己。晚安!

对自己狠一点,逼自己努力,再过几年你将会感谢今天发狠的自己、恨透今天懒惰自卑的自己。晚安!

查看: 749|回复: 0

Vue2批量生成二维码并下载的实现步骤

[复制链接]

  离线 

TA的专栏

  • 打卡等级:无名新人
  • 打卡总天数:1
  • 打卡月天数:0
  • 打卡总奖励:16
  • 最近打卡:2025-09-14 21:37:34
等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
33
主题
25
精华
0
金钱
110
积分
60
注册时间
2023-10-4
最后登录
2025-9-14

发表于 2025-9-11 08:04:00 | 显示全部楼层 |阅读模式
在Vue2中批量生成二维码并打包成压缩包下载,我们可以使用以下步骤:


  • 使用
    1. qrcode
    复制代码
    库生成二维码图片(这里我们可以使用
    1. qrcode
    复制代码
    1. qrcodejs2
    复制代码
    )。
  • 使用
    1. jszip
    复制代码
    库将生成的二维码图片打包成压缩包。
  • 使用
    1. file-saver
    复制代码
    库将压缩包保存到本地。

具体步骤:

安装依赖:

    1. qrcode
    复制代码
    :用于生成二维码图片数据。
    1. jszip
    复制代码
    :用于创建压缩包。
    1. file-saver
    复制代码
    :用于保存文件到本地。
在Vue组件中,我们可以创建一个方法,该方法接收一个包含多个文本的数组(每个文本生成一个二维码),然后遍历这个数组生成二维码图片。
生成二维码时,我们可以使用
  1. QRCode.toDataURL
复制代码
方法将文本转换为二维码的DataURL(base64格式)。
使用JSZip创建一个压缩包实例,将每个生成的二维码(base64数据)作为文件添加到压缩包中。
使用JSZip生成压缩包,然后使用FileSaver保存到本地。
注意:由于生成多个二维码是异步操作,我们需要使用
  1. Promise.all
复制代码
来等待所有二维码生成完毕。

安装依赖:
  1. npm install qrcode jszip file-saver
复制代码
代码示例:
  1. <template>
  2.   <div>
  3.     <button @click="generateAndDownload">批量生成并下载二维码</button>
  4.   </div>
  5. </template>

  6. <script>
  7. import QRCode from 'qrcode';
  8. import JSZip from 'jszip';
  9. import { saveAs } from 'file-saver';

  10. export default {
  11.   methods: {
  12.     async generateAndDownload() {
  13.       // 1. 准备数据(示例)
  14.       const qrDataList = [
  15.         { id: 'user001', content: 'https://example.com/user001' },
  16.         { id: 'user002', content: 'https://example.com/user002' },
  17.         // ...更多数据
  18.       ];

  19.       const zip = new JSZip();
  20.       
  21.       // 2. 批量生成二维码
  22.       const promises = qrDataList.map(item =>
  23.         QRCode.toDataURL(item.content)
  24.           .then(dataUrl => {
  25.             // 3. 将base64转换为Blob
  26.             const blob = this.dataURLtoBlob(dataUrl);
  27.             // 4. 添加到压缩包
  28.             zip.file(`${item.id}.png`, blob);
  29.           })
  30.       );

  31.       // 5. 等待所有二维码生成完成
  32.       await Promise.all(promises);
  33.       
  34.       // 6. 生成并下载压缩包
  35.       zip.generateAsync({ type: 'blob' })
  36.         .then(content => {
  37.           saveAs(content, 'qrcodes.zip');
  38.         });
  39.     },

  40.     // 工具函数:Base64转Blob
  41.     dataURLtoBlob(dataUrl) {
  42.       const arr = dataUrl.split(',');
  43.       const mime = arr[0].match(/:(.*?);/)[1];
  44.       const bstr = atob(arr[1]);
  45.       let n = bstr.length;
  46.       const u8arr = new Uint8Array(n);
  47.       
  48.       while (n--) {
  49.         u8arr[n] = bstr.charCodeAt(n);
  50.       }
  51.       
  52.       return new Blob([u8arr], { type: mime });
  53.     }
  54.   }
  55. };
  56. </script>
复制代码
关键点说明

QRCode生成

  • 使用
    1. qrcode.toDataURL()
    复制代码
    生成Base64格式的二维码
  • 默认生成PNG格式(300x300像素)
压缩包处理

    1. JSZip
    复制代码
    创建内存中的压缩包
    1. zip.file(name, content)
    复制代码
    添加文件
    1. generateAsync()
    复制代码
    生成压缩包Blob
文件下载

    1. file-saver
    复制代码
    1. saveAs()
    复制代码
    触发浏览器下载
  • 文件名默认为
    1. qrcodes.zip
    复制代码

优化建议

批量限制
  1. // 分批次处理(每批10个)
  2. const batchSize = 10;
  3. for (let i = 0; i < qrDataList.length; i += batchSize) {
  4.   const batch = qrDataList.slice(i, i + batchSize);
  5.   // 处理批次...
  6. }
复制代码
进度显示
  1. // 添加进度状态
  2. data() {
  3.   return {
  4.     progress: 0,
  5.     total: 0
  6.   }
  7. },

  8. // 在生成方法中更新进度
  9. promises = qrDataList.map((item, index) => {
  10.   return QRCode.toDataURL(item.content)
  11.     .then(/* ... */)
  12.     .finally(() => {
  13.       this.progress = Math.floor((index + 1) / qrDataList.length * 100);
  14.     });
  15. });
复制代码
自定义配置
  1. // 二维码高级配置
  2. QRCode.toDataURL(item.content, {
  3.   width: 400,          // 大小
  4.   margin: 2,           // 边距
  5.   color: {
  6.     dark: '#000',      // 二维码颜色
  7.     light: '#ffffff00' // 透明背景
  8.   }
  9. })
复制代码
注意事项


  • 内存限制:大量二维码(如1000+)可能导致内存溢出,建议分批次处理
  • 异步处理:使用
    1. Promise.all
    复制代码
    确保所有二维码生成完成后再打包
  • 文件名规范:确保文件名合法(避免特殊字符)
  • 浏览器兼容:Blob API 兼容IE10+,如需更低版本需添加polyfill

替代方案(减少内存使用)
  1. // 使用canvas直接绘制(避免Base64转换)
  2. const canvas = document.createElement('canvas');
  3. QRCode.toCanvas(canvas, content).then(() => {
  4.   canvas.toBlob(blob => {
  5.     zip.file(`${id}.png`, blob);
  6.   });
  7. });
复制代码
到此这篇关于Vue2批量生成二维码并下载的实现步骤的文章就介绍到这了,更多相关Vue2生成二维码并下载内容请搜索晓枫资讯以前的文章或继续浏览下面的相关文章希望大家以后多多支持晓枫资讯!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
      1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
      2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
      3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
      4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
      5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|晓枫资讯--科技资讯社区 本站已运行

CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

晓枫资讯--科技资讯社区

本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表