2017-05-28 13 views
0

我可以使用boto.s3.resumable_download_handler和boto.s3.connection將非常大的〜2000個文件從s3存儲區下載到本地磁盤。下載並存檔到本地磁盤中的tar文件。有用。Nodejs:s3 getObject文件的下載和歸檔失敗數量非常大

我正在嘗試在nodejs中使用相同的功能: 如果我試圖使用s3 getObject和archive下載〜500個以下的文件。文件被下載並存檔到本地磁盤(使用nodejs)。

我試圖使用s3 getObject下載非常大的〜2000個文件,並使用nodejs中的存檔將這些文件從服務器存檔到本地磁盤。 我越來越s3錯誤:請降低您的請求率。服務不可用:請降低您的請求率。

代碼段:

 var AWS = require('aws-sdk'); 
     var archiver = require('archiver'); 
     var fs = require('fs'); 
     var OutputFileName = 'abc.zip' 

     s3Client.listObjects(parameters, function(error, data) { 
     var dataConts = data.Contents; 
     dataConts.forEach(function(dataE) { 
      var aparams = {Bucket: bucketName, Key: dataE.Key}; 

      archive.append(s3Client.getObject(aparams).createReadStream(), 
      { name: dataE.Key } 
      ); 

      archive.on('error', function(error) { 
      throw error; 
      }); 

      archive.on('end', function() { 
      callback(); 
      }); 

      response.attachment(OutputFileName); 
      archive.pipe(respose); 
      archive.finalize(); 
     }); 
     }); 

任何人都可以讓我知道是否S3和檔案可以在任何其它方式使用,下載和存檔的文件數量非常龐大的。

+0

標籤'python'不適用於此 – arboreal84

回答

0

您正在爲rate limited by Amazon

該頁面有解決該問題的指南。您必須減少請求計數或批量處理,或者遷移到其他服務,例如Amazon CloudFront(CDN)或Akamai。

+0

感謝您的回覆。你可以讓我知道如何在nodejs中使用archive和s3進行批處理。 – Yamini

+0

這將是一個單獨的問題。創建一個新問題。 – arboreal84

+0

我不認爲應該有新的問題。速度限制相當明顯是所示代碼中嚴重錯誤的副作用。存檔對象顯然被濫用在這裏,以非常快的速度連續調用新創建的S3對象數據流的附加內容,而不是等待響應,並且在循環內部而不是之前反覆調用'archive.on()'。 –