
async function zipBuffer(payload) { return new Promise((res, rej) => { gzip(payload, (err, buffer) => { if (err) { rej(err); } res(buffer); }); }); } 使用archiver没这个问题,就是没办法直接压缩到 buffer,需要先生成压缩文件再读取,感觉绕了一个圈子
function zipBuffer(buffer, outputName) { return new Promise((res, rej) => { const outputPath = `./temp_data/_${getToken()}.zip`; const output = fs.createWriteStream(outputPath); const archive = archiver('zip', { zlib: { level: 9 }, }); archive.pipe(output); archive.append(buffer, { name: outputName }); archive.finalize(); output.on('close', async function () { const zipBuffer = await streamToBuffer(fs.createReadStream(outputPath)); await unlinkFile(outputPath); res(zipBuffer); }); output.on('error', async function (err) { rej(err); }); }); } 1 joesonw 2021 年 1 月 19 日 xlsx 本来就是 zip 阿. 你把后缀改为.zip 打开就知道了. |