Node.js AWS S3无限期挂起大量图像文件getObject请求

时间:2017-06-01 19:02:46

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

我有一个应用程序,一次从Amazon S3请求多达几百个图像文件。使用嵌套的promises按顺序请求文件(因此这不是一个问题,每秒的请求数量或可以一次传输的数据量有一些限制),一切都可以达到100多个文件。但是,S3此后无限期挂起。我该如何解决?请参阅下面的相关代码。

function one_by_one(objects_array, iterator, callback) {
    let start_promise = objects_array.reduce(function (prom, object) {
        return prom.then(function () {
            return iterator(object);
        });
    }, Promise.resolve()); // initial
    if(callback){
        start_promise.then(callback);
    }else{
        return start_promise;
    }
}

let grabImage = function(image){
      params = {Bucket: 'partpics', Key: image};
      let getObjectPromise = s3.getObject(params).promise();
      return getObjectPromise.then(function(data) {
          console.log('Success');
          res.imageBuffers.push(data.Body);
          bufferTemp = res.imageBuffers;
          console.log('res.imageBuffers index: ',res.imageBuffers.length-1);
      }).catch(function(err) {
        console.log(err);
      });

};
let myCallback = function() {
  next();
}
one_by_one(res.insertThis.Image,grabImage,myCallback);

1 个答案:

答案 0 :(得分:0)

最终,我解决了这个问题,将应用程序从Heroku移动(需要Git推送,因此在本地保存图像文件时导致大的Git对象问题)到Di​​gital Ocean(不需要Git,从而实现本地保存)图像)。因此,AWS S3现在也不再适用。此外,这提供了额外的好处,使应用程序的PDF生成更快,更快。