java - 如何使用 ListObjectsV2Request 上的前缀或分隔符过滤 AWS 中的键?

标签 java amazon-web-services amazon-s3 pattern-matching

我有以下键选项:

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/

相关文章:

java - 如何在没有javaee的情况下将邮件发送到gmail smtp java

java - Axis Web 服务引发错误 : Exception occurred while trying to invoke service method

java - 在数据库中保存语言环境

mysql - 403 禁止访问 AWS EC2 实例上的 phpmyadmin

python - S3分段上传-异步完成分段上传

java - 如何在 Android 上使用 3 级数据从 Firebase 数据库中选择数据?

amazon-web-services - aws lambda 函数为单个事件多次触发

python - 在 python boto 中使用 cognito 获取 AWS 凭证

python - S3Cmd 不适用于 S3 Ninja

amazon-web-services - 无法退出 AWS CLI 帮助页面