如何在React JS中从S3存储桶中获取5个最新文件?

时间:2019-05-06 11:03:10

标签: reactjs amazon-web-services amazon-s3 aws-sdk

我正在使用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 个答案:

答案 0 :(得分:1)

无法基于LastModified请求列表。

相反,您的应用程序将需要检索整个列表,然后对LastModified返回的对象进行排序,然后选择最新的5。

此外,请注意,每次调用最多返回1000个对象。您将需要使用Continuation Token来请求下一个1000个对象,并不断重复直到列表完成。

如果您要定期执行此操作,则还可以考虑使用Amazon S3 Inventory,它可以每天提供存储桶中所有对象的列表。

答案 1 :(得分:0)

S3不允许按上次修改日期对对象进行排序,因此您需要获取所有对象,然后在代码中对其进行排序。

如果存储桶较大,可能会导致性能问题。

为了避免这种情况,您应该在上传后将对象的创建日期存储在某个数据库中。您可以从代码中进行操作,也可以订阅S3事件并跟踪PUT操作(请参见https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTnotification.html