我正在尝试按照此处的建议使用node-archiver压缩目录的内容。该函数在 Node.js 运行时环境中的 AWS Lambda 中运行。
我的功能如下:
function zipDirectory(source, outputTarget) {
var archive = archiver("zip");
const stream = fs.createWriteStream(outputTarget, { flags: 'w' });
stream.on("close", () => {
console.log(archive.pointer() + ' total bytes');
console.log('archiver has been finalized and the output file descriptor has closed.');
});
return new Promise((resolve, reject) => {
archive.pipe(stream);
archive.on("error", err => reject(err))
archive.directory(source, false);
archive.finalize();
stream.close();
resolve();
});
}
结果是创建了 zip,但文件大小为零:
INFO 0 total bytes
INFO archiver has been finalized and the output file descriptor has closed.
我也无法提取存档并出现以下错误。
INFO Error: end of central directory record signature not found
笔记:
- 源目录肯定存在,已填充,并且路径正确。
- 一切都被写入
/tmp/
AWS Lambda 允许我们读写访问的目录。 - 我尝试使用 Lambda 部署包上传
zip
二进制文件并将其作为子进程运行,但显然不支持,因为它是 32 位包。如果您有替代方案,我可以使用它来压缩节点外部的目录,这些目录可以在 Lambda 的运行时工作,请告诉我。
感谢任何帮助,谢谢!