【发布时间】: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