使用Nodejs从AWS S3下载多个文件时出错

时间:2018-03-18 16:02:32

标签: javascript node.js amazon-web-services amazon-s3

我收到错误"文件下载失败,错误写入结束后#34;尝试使用下面的代码片段从AWS s3下载多个文件时。

有人可以帮助我弄清楚错误的根本原因吗?如果有人能提出解决方案的话会很棒

如果只需要下载一个文件,下面的代码可以正常工作

var AWS = require('aws-sdk');
var fs = require('fs')

module.exports.download = function (req, res) {

var S3_BUCKET = 'mybucketname'
var s3 = new AWS.S3({
    accessKeyId: process.env.ACCESSKEY,
    secretAccessKey: process.env.SECRETKEY,
    region: process.env.REGION
});

var os = require('os');
var filenames = "file1.jpg,file2.jpg"

var str_array = filenames.split(','); 
for (var i = 0; i < str_array.length; i++) {
    var filename = str_array[i].trim();

    localFileName = os.homedir() + "\\" + "Downloads" + "\\" + filename,

    file = fs.createWriteStream(localFileName);
    s3.getObject({
        Bucket: S3_BUCKET,
        Key: filename
    })
    .on('error', function (err) {
        res.end("File download failed with error " + err.message);            
    })
    .on('httpData', function (chunk) {
        file.write(chunk);
    })
    .on('httpDone', function () {
        file.end();
    })
    .send();
}
  res.end("Files have been downloaded successfully")
 }

1 个答案:

答案 0 :(得分:0)

最好使用pipe函数而不是手动处理它。

s3.getObject(options)
    .createReadStream()
    .on('error', e => ...)
    .pipe(file)
    .on('error', e => ...);