2017-02-22 97 views

回答

2

以下是從桶中獲取密鑰列表的代碼。

var params = { 
    Bucket: 'bucket-name'  
}; 

var allKeys = []; 
listAllKeys(); 
function listAllKeys() { 
    s3.listObjectsV2(params, function (err, data) { 
     if (err) { 
      console.log(err, err.stack); // an error occurred 
     } else { 
      var contents = data.Contents; 
      contents.forEach(function (content) { 
       allKeys.push(content.Key); 
      }); 

      if (data.IsTruncated) { 
       params.ContinuationToken = data.NextContinuationToken; 
       console.log("get further list..."); 
       listAllKeys(); 
      } 

     } 
    }); 
} 
+0

你能刪除一切是關閉的問題,例如印刷? – eljefedelrodeodeljefe

+1

根據要求更新了答案。 – notionquest

3

這是做,在我看來,最好的辦法:

const AWS = require('aws-sdk'); 
const s3 = new AWS.S3(); 

const listAllKeys = (params, out = []) => new Promise((resolve, reject) => { 
    s3.listObjectsV2(params).promise() 
    .then(({Contents, IsTruncated, NextContinuationToken}) => { 
     out.push(...Contents); 
     !IsTruncated ? resolve(out) : resolve(listAllKeys(Object.assign(params, {ContinuationToken: NextContinuationToken}), out)); 
    }) 
    .catch(reject); 
}); 

listAllKeys({Bucket: 'bucket-name'}) 
    .then(console.log) 
    .catch(console.log);