我有以下键选项:
cat/dog/<random_value>/ShortMetadata
cat/dog/<random_value>/bird/LongMetadata
cat/dog/<random_value>/values
cat/dog/bird/frog
cat/dog/<random_value>/bird/<random_value>/HalfMetadata
我只想过滤元数据 -> ShortMetadata、LongMetadata 和 HalfMetadata。
无法弄清楚如何使用模式匹配以良好的方式做到这一点。
我查看了 ListObjectsV2Request
上给出的选项,但发现我只能使用 .prefix
或 .delimiter
(我认为我正在寻找是后缀..)
看起来像的东西:
ListObjectsV2Request().withBucketName(bucketName).withPrefix(Pattern.compile("*/*Metadata"));
或者:
ListObjectsV2Request().withBucketName(bucketName).withPrefix("cat/dog/" + "*" + "Metadata"));
有人可以建议该怎么做吗?
最佳答案
您说得对,您需要一种根据后缀过滤掉键的机制。
不幸的是,到目前为止,这在 S3 中是不可能的。您有以下选择
选项 1
为元数据对象添加某种后缀。或许如下
cat/dog/Metadata/<random_value>/ShortMetadata
cat/dog/Metadata/<random_value>/bird/LongMetadata
在这里您可以使用前缀cat/dog/Metadata
进行搜索。但这个选项的可行性完全取决于你的程序逻辑
选项 2
如果您经常需要该信息,您可以将 key 存储在某种持久性(RDBMS 或 DynamoDB)中
选项 3
如果您要排序的对象数量不是很大,那么显然您可以列出整组键并过滤掉您需要的内容。但这不是一个可扩展且高性能的选项
关于java - 如何使用 ListObjectsV2Request 上的前缀或分隔符过滤 AWS 中的键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51881358/