使用JavaScript SDK v3按指定存储类别列出S3存储桶中的对象
我想按照API中能实现的方式,通过StorageClass过滤 listObjectsV2:
aws s3api list-objects --bucket Your_Bucket --query 'Contents[?StorageClass==`STANDARD`][Key]' --output text | foreach { aws s3 cp s3://Your_Bucket/$_ s3://Your_Bucket/$_ --storage-class REDUCED_REDUNDANCY }
如何用 JavaScript SDK v3 实现?
const filter = {"Contents": { "StorageClass": "GLACIER" }}
const data = await s3Client.send(new ListObjectsV2Command({ ...filter, Bucket: bucketName }));
解决方案
要获取桶中的所有对象数量,我必须使用分页器:
import { paginateListObjectsV2 } from "@aws-sdk/client-s3";
export async function listAwsS3Objects(s3Client, bucketName, filter = {}) {
const paginator = paginateListObjectsV2(
{ client: s3Client },
{ Bucket: bucketName, Prefix: filter.Prefix || '' }
);
const allObjects = [];
for await (const page of paginator) {
for (const obj of page.Contents || []) {
allObjects.push(obj);
}
}
console.log(`Found ${allObjects.length} objects`);
const filteredObjects = allObjects.filter(
(obj) => obj.StorageClass === filter.Contents.StorageClass
) || [];
console.log(`Filtered ${filteredObjects.length} objects`);
return filteredObjects;
}
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。