Если вы хотите получить список ключей только в определенной папке внутри S3 Bucket, тогда это будет полезно.
В основном, функция listObjects
начнет поиск с установленной нами Marker
иискать до maxKeys: 1000
как предел.поэтому он будет искать по одной папке и получать первые 1000 ключей, которые он найдет из другой папки в корзине.
Учтите, что в моем корзине много папок с префиксом prod/some date/, Ex: prod/2017/05/12/ ,prod/2017/05/13/,etc
.
Я хочу получить список объектов (имен файлов) только в папке prod/2017/05/12/
, тогда я укажу prod/2017/05/12/
в качестве моего начала и prod/2017/05/13/
[имя вашей следующей папки] в качестве моего конца, и в коде я прерываю цикл, когдая сталкиваюсь с концом.
Каждый Key
в data.Contents
будет выглядеть следующим образом.
{ Key: 'prod/2017/05/13/4bf2c675-a417-4c1f-a0b4-22fc45f99207.jpg',
LastModified: 2017-05-13T00:59:02.000Z,
ETag: '"630b2sdfsdfs49ef392bcc16c833004f94ae850"',
Size: 134236366,
StorageClass: 'STANDARD',
Owner: { }
}
Код:
var list = [];
function listAllKeys(s3bucket, start, end) {
s3.listObjects({
Bucket: s3bucket,
Marker: start,
MaxKeys: 1000,
}, function(err, data) {
if (data.Contents) {
for (var i = 0; i < data.Contents.length; i++) {
var key = data.Contents[i].Key; //See above code for the structure of data.Contents
if (key.substring(0, 19) != end) {
list.push(key);
} else {
break; // break the loop if end arrived
}
}
console.log(list);
console.log('Total - ', list.length);
}
});
}
listAllKeys('BucketName', 'prod/2017/05/12/', 'prod/2017/05/13/');
Вывод:
[ 'prod/2017/05/12/05/4bf2c675-a417-4c1f-a0b4-22fc45f99207.jpg',
'prod/2017/05/12/05/a36528b9-e071-4b83-a7e6-9b32d6bce6d8.jpg',
'prod/2017/05/12/05/bc4d6d4b-4455-48b3-a548-7a714c489060.jpg',
'prod/2017/05/12/05/f4b8d599-80d0-46fa-a996-e73b8fd0cd6d.jpg',
... 689 more items ]
Total - 692