Java AWS SDK v2:列出bucket密钥,但仅列出文件



我使用的是S3software.amazon.awssdk.s3的AWS SDK v2。我有一个bucket,我列出了检索对象的密钥。我希望列出对象密钥,并得到这样的东西:

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

然而,上市过程也会返回根密钥,可以说

ACTIVE/

当我为键ACTIVE/运行GetOjbectRequest时,它会抛出一个错误,因为您无法检索到它。那么,我该如何将只想列出实际对象的键或过滤响应以使我在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());

非常感谢任何帮助

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

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

记住,即使在控制台中你可以创建一个"文件夹",但在幕后却不是。这只是AWS存储的一个对象。这就是为什么SDK中没有内置选项来创建/list/whathing文件夹。

最新更新