2017-06-01 16 views
0

我有一個應用程序一次請求多達幾百個來自Amazon S3的圖像文件。這些文件是使用嵌套承諾順序請求的(所以這不是一個限制每秒請求數量或一次可以傳輸的數據量的問題),並且一切都很順利,最多隻有100多個文件。然而,此後S3無限期掛起。我該如何解決?請參閱以下相關代碼。Node.js AWS S3無限期地掛在大量圖像文件getObject請求

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); 
+0

你可以通過一些簡單的類似於curl的調用(http get)來取代S3的GetObject函數來確保你的承諾代碼/框架不是問題嗎? – jarmod

+0

這絕對不是問題,因爲在使用任何承諾之前我有同樣的問題。我認爲這個問題可能是太多的並行請求,因此是承諾。但這顯然不是問題。 – 223seneca

+0

我嘗試了使用request-promise模塊從AWS Cloudfront獲取數據的不同方法。它仍停留在完全相同的地方因此,我已確定地確定這不是AWS S3問題,而是節點(或可能是操作系統)問題。 – 223seneca

回答

0

最終,我通過移動從Heroku的應用程序(這需要Git的推動,因此造成大的Git對象時,圖像文件被保存在本地的問題),以數字海洋(不需要Git的解決了這個問題,從而使本地保存圖像)。因此,AWS S3現在也不在眼前。此外,這還爲應用程序的PDF生成提供了更多,更快的額外好處。

相關問題