首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Node.js ArchiverJS库在AWS中不写入输出文件

Node.js ArchiverJS库在AWS中不写入输出文件
EN

Stack Overflow用户
提问于 2020-10-01 22:11:44
回答 1查看 509关注 0票数 0

我正试图像建议的节点-存档器那样使用这里压缩目录的内容。该函数在Node.js运行时环境中的AWS中运行。

我的职能如下:

代码语言:javascript
复制
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,但文件大小为零:

代码语言:javascript
复制
INFO    0 total bytes
INFO    archiver has been finalized and the output file descriptor has closed.

我也无法用以下错误解压缩归档文件。

代码语言:javascript
复制
INFO    Error: end of central directory record signature not found

备注:

  1. 源目录肯定存在,被填充,路径是正确的。
  2. 所有内容都写入到AWS允许我们读写访问的/tmp/目录中。
  3. 我尝试将zip二进制文件与Lambda部署包一起上传,并将其作为子进程运行,但显然不支持它,因为它是一个32位的包。如果您有我可以使用的在Lambda运行时工作的节点外的目录压缩的替代方案,请告诉我。

感谢您的帮助,谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-02 21:09:44

好吧,我想错了。

  1. archive.finalize()返回一个承诺,函数在归档完成之前返回。
  2. 调用stream.close()是不必要的,因为archive.finalize()对您来说是这样做的,因此不管归档是否完成,流都是关闭的。

正确的代码如下所示:

代码语言:javascript
复制
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(async (resolve, reject) => {
        archive.pipe(stream);
        archive.on("error", err => reject(err))
        archive.directory(source, false);
        await archive.finalize();
        resolve();
    });
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64163831

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档