【问题标题】:Trouble unzipping .json.gz file in Node.js using zlib使用 zlib 在 Node.js 中解压缩 .json.gz 文件时遇到问题
【发布时间】:2017-04-05 02:01:30
【问题描述】:

我正在使用这个在我的本地 Node.js 服务器上下载 this AWS S3 object -

var url = "http://s3.amazonaws.com/cloudfront.s3post.cf/s3posts.json.gz";
var dest = "./s3posts.json.gz";

var download = function(url, dest, cb) {
    var file = fs.createWriteStream(dest);
    var request = http.get(url, function(response) {
        response.pipe(file);
        file.on('finish', function() {
            file.close(cb);
        });
    });
}

download(url, dest, function() {
    console.log('Download complete');
});

这会成功下载.json.gz 对象。我正在尝试使用 zlib 解压缩此对象 -

var gunzip = zlib.createGunzip();
var rstream = fs.createReadStream('./s3posts.json.gz');
var wstream = fs.createWriteStream('./s3posts.json');
rstream.pipe(gunzip).pipe(wstream);

但是,这会引发错误,并且创建的 .json 文件为空 -

events.js:163
      throw er; // Unhandled 'error' event
      ^

Error: unexpected end of file
    at Zlib._handle.onerror (zlib.js:355:17)

奇怪的是,如果我只使用下载代码下载对象并在终端上使用gunzip s3posts.json.gz 手动解压缩,则创建的 json 文件会充满内容,我可以成功运行我的应用程序。

我不确定为什么我可以手动解压缩,但不能使用 zlib 以编程方式解压缩。如果有人能指出我是否犯了错误,那将非常有帮助。

S3 对象具有以下相关元数据 -

Cache-Control: max-age=31536000,no-transform,public
Content-Encoding: gzip
Content-Type: application/json

【问题讨论】:

    标签: json node.js amazon-web-services amazon-s3 zlib


    【解决方案1】:

    发生的情况是,您在下载 gzip 压缩文件时没有检查错误,因此最终保存了一个空文件。然后你尝试解压这个空文件,你会得到一个错误,这也是未处理的,你的程序崩溃了。

    只需处理所有错误,您就知道出了什么问题。从您的示例中,除了 .gz 文件可能为空之外,无法告诉您更多信息,因为下载显然出了点问题。但是想要到底出错是个谜,因为您不检查代码中的错误。

    【讨论】:

    • 我只需要使用解压文件的代码作为回调函数。感谢您的帮助。
    【解决方案2】:

    原来我在解压缩之前没有等待文件完成下载;这就是生成的json 为空的原因。我不得不使用解压缩文件的代码作为回调函数 -

    download(url, dest, function() {
        console.log('Download complete');
        var gunzip = zlib.createGunzip();
        var rstream = fs.createReadStream('./s3posts.json.gz');
        var wstream = fs.createWriteStream('./s3posts.json');
        rstream.pipe(gunzip).pipe(wstream);
    });
    

    这也解释了为什么我能够仅使用下载代码手动解压缩文件,因为此时下载已完成,允许我在终端上成功解压缩。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多