node生成二维码并打包下载
2024-11-20 19:18:58
node生成二维码并打包下载
2611
1.如何使用node生成二维码
引入qrcode插件;
cnpm i qrcode -S
引入函数并且封装成函数
async createQr(url, name) { return await new Promise((resolve, reject) => { QRCode.toFile(name, url, { color: { dark: '#ffffff', light: '#0000' } }, function (err) { if (err) throw resolve(err); resolve('成功'); }); }).then(data => data); };
直接调用
await this.createQr('http://baidu.com', '1.png');//指定文件夹 let res = await this.createQr('http://baidu.com', path.join(config.dir,'/tmp/6.png'));
2.引入jszip压缩
cnpm i jszip -S
引入并封装函数
async toZip (fileName, { delSource = false } = {}) { return await new Promise(async(resolve, reject) => { var zip = new JSZip(); let file = fileName+'.png'; let content =await fs.readFileSync(path.join(config.dir,file)); zip.file(file, content); let _this=this; // 压缩 /** 批量 let fileArr=await fs.readdirSync(path.join(config.dir,'/tmp')) for(let i=0;i<fileArr.length;i++){ let content =await fs.readFileSync(path.join(config.dir,'/tmp/'+fileArr[i])); zip.file(fileArr[i]+'.png', content); } */ zip.generateAsync({ // 压缩类型选择nodebuffer,在回调函数中会返回zip压缩包的Buffer的值,再利用fs保存至本地 type: "nodebuffer", // 压缩算法 compression: "DEFLATE", compressionOptions: { level: 1 } }).then(function (content) { let zip = fileName + '.zip'; let url=path.join(config.dir,zip); // 写入磁盘 fs.writeFile(url, content, function (err) { if (!err) { // 是否删除源文件 resolve(url) if (delSource) { //删除文件 } } else { console.log(zip + '压缩失败'); } }); }); }); };
直接在egg中调用
let res = await this.createQr('http://baidu.com', '1.png'); let url= await this.toZip('1'); this.ctx.attachment(url); this.ctx.set('Content-Type', 'application/vnd.openxmlformats;charset=utf-8'); this.ctx.body = fs.createReadStream(url);