JS 批量生成二维码打包zip下载
拿到一些链接, 要把链接生成二维码图片, 然后压缩生成的二维码为zip包, 最后下载
准备工作
安装依赖
npm install qrcode jszip
生成二维码
const QRCode = require('qrcode');
//传入 url 和要生成的文件名
async generateQRCode(url, filename) {
try {
const qrCode = await QRCode.toDataURL(url);
// You can save the QR code image or use it as needed
// Here, we are just printing the filename and data URL
// console.log('QR Code generated for', filename);
// console.log('Data URL:', qrCode);
return { filename, qrCode };
} catch (error) {
console.error('Error generating QR Code for', filename, error);
return null;
}
}
生成批量数据
const JSZip = require('jszip');
async downLoadCodeZip() {
let qrCodeDataArray = []
let urlList = [{url:'https://',file_name:'xxx'},...]
for (let j = 0; j < urlList.length; j++) {
let x = urlList[j]
let data = await this.generateQRCode(x.url, x.file_name)
qrCodeDataArray.push(data)
}
await createZipFile(qrCodeDataArray)
}
生成zip包和下载
async createZipFile(qrCodeDataArray) {
const zip = new JSZip();
qrCodeDataArray.forEach(({ filename, qrCode }) => {
zip.file(`${filename}.png`, qrCode.split('base64,')[1], { base64: true });
});
// const zipContent = await zip.generateAsync({ type: 'nodebuffer' });
const zipContent = await zip.generateAsync({ type: 'blob' });
const zipBlob = new Blob([zipContent], { type: 'application/zip' });
const zipUrl = URL.createObjectURL(zipBlob);
const downloadLink = document.createElement('a');
downloadLink.href = zipUrl;
downloadLink.download = `zipFile.zip`;
document.body.appendChild(downloadLink);
downloadLink.click();
document.body.removeChild(downloadLink);
// fs.writeFileSync('qrcodes.zip', zipContent);
console.log('Zip file created: qrcodes.zip');
}
收工.