Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 基于对象键的子字符串查找/删除S3对象_Java_Amazon S3 - Fatal编程技术网

Java 基于对象键的子字符串查找/删除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

如果只有部分对象键,是否可以查找/删除S3对象

场景:假设用户在S3中存储
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 ".*"