使用JavaScript SDK v3按指定存储类别列出S3存储桶中的对象

前端开发 2026-07-10

我想按照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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章