Java 基于对象键的子字符串查找/删除S3对象
如果只有部分对象键,是否可以查找/删除S3对象 场景:假设用户在S3中存储Java 基于对象键的子字符串查找/删除S3对象,java,amazon-s3,Java,Amazon S3,如果只有部分对象键,是否可以查找/删除S3对象 场景:假设用户在S3中存储123123.jpeg(bucket名称:mybucket),我需要删除此对象,但我只知道123123,而不知道扩展名为.jpeg的整个密钥 我知道我们可以根据前缀在bucket中找到对象,但是如果对象存在于bucket中的路径中,那么这只适用于mybucket/imgpath/123123.jpeg您可以使用暴力: List<String> matchingKeys = new ArrayList<&g
123123.jpeg
(bucket名称:mybucket),我需要删除此对象,但我只知道123123
,而不知道扩展名为.jpeg
的整个密钥
我知道我们可以根据前缀在bucket中找到对象,但是如果对象存在于bucket中的路径中,那么这只适用于
mybucket/imgpath/123123.jpeg
您可以使用暴力:
List<String> matchingKeys = new ArrayList<>();
Predicate<String> predicate = Pattern.compile(".*/" + filename + "\\.\\w+").asPredicate();
for (ObjectListing listing = s3.listObjects(bucketName, "/");; listing = s3.listNextBatchOfObjects(listing)) {
listing.getObjectSummaries().stream()
.map(S3ObjectSummary::getKey)
.filter(predicate)
.forEach(matchingKeys::add);
if (!listing.isTruncated()) {
break;
}
}
注意:这使用了一个正则表达式,该正则表达式适用于给定无扩展名文件名查找密钥的场景,但您可以根据需要调整正则表达式。例如,要查找在其键中任何位置都有子字符串的所有键,请使用正则表达式
".*" + substring ".*"
或不区分大小写
"(?i).*" + substring ".*"
等等
免责声明:代码可能无法编译或工作,因为它是在我的手机上被翻阅的(但它很有可能工作)检查此问题:
"(?i).*" + substring ".*"