我正在使用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个最新对象。
请建议是否有人知道解决方案。
答案 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)