报错如下:
File size (2653263820) is greater than possible Buffer: 2147483647 bytes
大概意思是说,这个压缩包在缓冲区超过了2GB,node直接就给我报错了,adm-zip 将整个文件读取到内存中并将其保存在那里,我不知道为什么作者要这么做。
我的解决办法是不使用这个库了,我推荐使用node-stream-zip库,它使用stream流的形式解压,就比较完美。不会完全读进内存,我封装的解压函数:
const StreamZip = require('node-stream-zip');
//zipFilePath压缩包的地址,extractTo为解压到哪里
async function unzipFile(zipFilePath, extractTo) {
return new Promise((resolve, reject) => {
try {
// 初始化stream-zip对象
const zip = new StreamZip({
file: zipFilePath, // ZIP文件路径
storeEntries: true, // 保存条目信息以便后续访问
});
// 提取所有文件到指定目录
zip.on('ready', () => {
zip.extract(null, extractTo, (err, count) => {
if (err) {
reject(err);
} else {
console.log(`${count} files extracted to ${extractTo}`);
zip.close(); // 关闭zip文件
resolve(count);
}
});
});
// 监听错误事件
zip.on('error', (err) => {
reject(err);
});
} catch (error) {
reject(error);
}
});
}
调用
const extractedFilesCount = await unzipFile(filePath, tempPath);
在node中最好使用stream流来读取文件,不然会占用过多内存~
点个三连吧~