java - Java AWS SDK v2:列出存储桶键,但仅列出文件
问题描述
我正在使用 AWS SDK v2 for S3 software.amazon.awssdk.s3
。我有一个桶,我列出了检索对象的键。我期待列出对象键,并得到如下内容:
...
ACTIVE/somefile.jpg
ACTIVE/someotherfile.jpg
...
但是,上市过程也将返回 root-key 可以说
ACTIVE/
当我运行GetOjbectRequest
for 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());
任何帮助是极大的赞赏
解决方案
您将需要使用该属性prefix
来过滤示例中的“文件夹”。类似的东西:
ListObjectsV2Request.builder()
.bucket("your-bucket")
.prefix("ACTIVE/")
.build();
请记住,即使在控制台中您可以创建一个“文件夹”,但在幕后却不是。它只是 AWS 存储的一个对象。这就是为什么 SDK 中没有内置选项来创建/列出/任何文件夹的原因。
推荐阅读
- mysql-8.0 - 在 mysql 8 中使用单个查询删除所有事件
- ios - 如何安排在特定时间过去后以某种频率重复的通知
- movesense - Movesense、imu 数据的时间戳来源以及一般的时序问题
- apache - 是否可以使用 hbase2 构建和使用 apache kylin
- python - 如何使用 python 代码将 UUID 分配给文件 (.mydsl)
- android - 如何从另一个班级的 timePicker 获取时间?
- asp.net - 如何更改电子邮件状态google api c#
- yii2 - Yii2 - 如何在日志消息中设置时间?
- elasticsearch - 弹性搜索没有为 1 个字段搜索提供正确的结果
- reactjs - Gatsby with Apollo 在查询中未定义时给出错误作为客户端