2017-02-22 33 views
0

С версией API версии listObjects вы бы сделали что-то вроде этого SO answer.aws-sdk S3: лучший способ рекурсивно перечислить все ключи с помощью listObjectsV2

var allKeys = []; 
function listAllKeys(marker, cb) { 
    s3.listObjects({Bucket: s3bucket, Marker: marker}, function(err, data){ 
    allKeys.push(data.Contents); 

    if(data.IsTruncated) 
     listAllKeys(data.NextMarker, cb); 
    else 
     cb(); 
    }); 
} 

Что бы эквивалент функции listObjectsV2?

ответ

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

 Смежные вопросы

  • Нет связанных вопросов^_^