Javascript Can';t在nodejs中下载AWS S3文件

Javascript Can';t在nodejs中下载AWS S3文件,javascript,node.js,amazon-web-services,amazon-s3,Javascript,Node.js,Amazon Web Services,Amazon S3,我试图使用Amazon的S3服务,我设法将Gzip文件上传到我的bucket中,但我无法检索它们。我试着使用我发现的代码示例,当我上传文件时,一切正常,但我无法下载它们。 这是我的上传代码: var s3 = new AWS.S3(); s3.headBucket({Bucket: bucketName}, function (err) { if (err) s3.createBucket({Bucket: bucketName}, cb); var body = fs.cre

我试图使用Amazon的S3服务,我设法将Gzip文件上传到我的bucket中,但我无法检索它们。我试着使用我发现的代码示例,当我上传文件时,一切正常,但我无法下载它们。 这是我的上传代码:

var s3 = new AWS.S3();
s3.headBucket({Bucket: bucketName}, function (err) {
    if (err) s3.createBucket({Bucket: bucketName}, cb);
     var body = fs.createReadStream(file).pipe(zlib.createGzip());
    s3.upload({Bucket: bucketName, Key: key, Body: body}).send(cb);
});
 var s3 = new AWS.S3();
 var params = {Bucket: bucketName, Key: key};
 var outFile = require('fs').createWriteStream(file);
 s3.getObject(params).createReadStream().pipe(zlib.createGunzip()).pipe(outFile);
这是我的下载代码:

var s3 = new AWS.S3();
s3.headBucket({Bucket: bucketName}, function (err) {
    if (err) s3.createBucket({Bucket: bucketName}, cb);
     var body = fs.createReadStream(file).pipe(zlib.createGzip());
    s3.upload({Bucket: bucketName, Key: key, Body: body}).send(cb);
});
 var s3 = new AWS.S3();
 var params = {Bucket: bucketName, Key: key};
 var outFile = require('fs').createWriteStream(file);
 s3.getObject(params).createReadStream().pipe(zlib.createGunzip()).pipe(outFile);
但是我得到了抛出新错误的
error('现在不能切换到旧模式')在最后一行。
我不知道如何修复它,我正在使用节点0.10.25(我无法更改它)。
所以我试着用这个:

var params = {Bucket: bucketName, Key: key};
s3.getObject(params, function(err, data) {
    var outFile = require('fs').createWriteStream(file);
    var read = AWS.util.buffer.toStream(data.Body);
    read.pipe(zlib.createGzip()).pipe(outFile);
    read.on('end', function(){cb();});
});
但我经常会得到错误104(输入的意外结束)


有人有什么想法吗

< P>输入的意外结束可能是由于管道过早关闭或在读取固定大小的块或数据结构时遇到的其他错误。 您可以查看—作为替代,它完全以Streams2样式编写

这里有一个例子

$ npm install minio
$ cat >> get-object.js << EOF

var Minio = require('minio')
var fs = require('fs')

// find out your s3 end point here:
// http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region

var s3Client = new Minio({
  url: 'https://<your-s3-endpoint>',
  accessKey: 'YOUR-ACCESSKEYID',
  secretKey: 'YOUR-SECRETACCESSKEY'
})

var outFile = fs.createWriteStream('test.txt');
s3Client.getObject('mybucket', 'my-key', function(e, dataStream) {
  if (e) {
    return console.log(e)
  }
  dataStream.pipe(outFile)
})
EOF
$npm安装minio

$cat>>get-object.js您好,很抱歉回复太晚,我发现输入结束不是我的代码错误,我最终下载了带有
s3.getObject(params).on('httpData',function(chunk){wStream.write(chunk);})的文件。在('httpDone',函数(){wStream.end();})上。send()