首页 > 解决方案 > Java AWS SDK v2:列出存储桶键,但仅列出文件

问题描述

我正在使用 AWS SDK v2 for S3 software.amazon.awssdk.s3。我有一个桶,我列出了检索对象的键。我期待列出对象键,并得到如下内容:

...
ACTIVE/somefile.jpg
ACTIVE/someotherfile.jpg
...

但是,上市过程也将返回 root-key 可以说

ACTIVE/

当我运行GetOjbectRequestfor keyACTIVE/时,它会引发错误,因为您无法检索它。那么如何传递给我的请求,即我只想列出实际对象的键,或者过滤我的响应,以便在GetOjbectRequest它们之前只有实际对象?

我的代码目前如下所示:

List<String> activeRuleKeys = listObjectsV2Responses.stream()
            .map(listObjectsV2Response -> listObjectsV2Response.contents())
            .flatMap(s3Objects -> s3Objects.stream())
            .map(s3Object -> s3Object.key())
            .collect(Collectors.toList());

// Error happens below
List<String> ruleSet = activeRuleKeys.stream().map(s -> {
        GetObjectRequest build = GetObjectRequest.builder().bucket(bucketName).key(s).build();
        String ruleString = this.s3Client.getObject(build, ResponseTransformer.toBytes()).asUtf8String();
        return ruleString;
    }).collect(Collectors.toList());

任何帮助是极大的赞赏

标签: javaamazon-web-servicesamazon-s3

解决方案


您将需要使用该属性prefix来过滤示例中的“文件夹”。类似的东西:

ListObjectsV2Request.builder()
  .bucket("your-bucket")
  .prefix("ACTIVE/")
  .build();

请记住,即使在控制台中您可以创建一个“文件夹”,但在幕后却不是。它只是 AWS 存储的一个对象。这就是为什么 SDK 中没有内置选项来创建/列出/任何文件夹的原因。


推荐阅读