Как получить 5 последних файлов из S3 Bucket в реагировать JS? - PullRequest
0 голосов
/ 06 мая 2019

Я использую aws-sdk для получения списка объектов, как показано ниже:

 const AWS = require('aws-sdk/global');

 const S3 = require('aws-sdk/clients/s3');

 AWS.config.update({ accessKeyId: 'abc123', secretAccessKey: 'teyb3872312', region: 'eu-west-1' });
 const s3 = new AWS.S3();

const params = {
  Bucket: 'demo-bucket',
  Delimiter: '',
  Prefix: '',
};

  s3.listObjectsV2(params, (err, data) => {
  if (err) throw err;
  console.log(data.Contents);
 })

Из этого кода я получаю все тысячи объектов из корзины, но хочу только 5 последних объектов из корзины.

Пожалуйста, предложите, если кто-нибудь знает решение.

Ответы [ 2 ]

1 голос
/ 06 мая 2019

Невозможно запросить листинг на основе LastModified.

Вместо этого вашему приложению нужно будет извлечь весь список, затем отсортировать объекты, возвращенные LastModified, а затем выбрать самый новый 5.

Также обратите внимание, что за вызов будет возвращено максимум 1000 объектов.Вам нужно будет использовать токен продолжения для запроса следующих 1000 объектов и повторять до тех пор, пока список не будет завершен.

Если вы будете делать это на регулярной основе, вы можете также рассмотреть возможность использования AmazonS3 Inventory , который может предоставить ежедневный список всех объектов в корзине.

0 голосов
/ 06 мая 2019

S3 не позволяет сортировать объекты по дате последнего изменения, поэтому вам нужно получить весь объект и затем отсортировать его в своем коде.

Это может вызвать проблемы с производительностью в случае больших сегментов.

Во избежание этого вы должны сохранить дату создания объекта в некоторой базе данных после загрузки. Вы можете сделать это из своего кода или подписаться на события S3 и отслеживать операции PUT (см. https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTnotification.html)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...