如何在ListObjectsV2Request上使用前缀或定界符过滤AWS中的键?

时间:2018-08-16 16:12:42

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

我对键有以下选择:

delete(id) {
  this.service.deleteUser(id).subscribe(
    ()=> console.log(`Employee with Id = ${this.employee.id}deleted`),
    (err) => console.log(err)
  );
}

我只想过滤元数据-> ShortMetadata,LongMetadata和HalfMetadata。 无法找出使用模式匹配的好方法。 我查看了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 上给出的选项,但发现只能使用ListObjectsV2Request.prefix(我想寻找的是后缀。)

看起来像:

.delimiter

或:

ListObjectsV2Request().withBucketName(bucketName).withPrefix(Pattern.compile("*/*Metadata"));

有人可以建议做什么吗?

1 个答案:

答案 0 :(得分:1)

您说的很对,您需要一种基于后缀来过滤键的机制。

不幸的是,到目前为止,这在S3中是不可能的。您有以下选择

选项1

为Metadata对象添加某种后缀。也许如下

cat/dog/Metadata/<random_value>/ShortMetadata 
cat/dog/Metadata/<random_value>/bird/LongMetadata

您可以在此处搜索前缀cat/dog/Metadata。但是此选项的可行性完全取决于您的程序逻辑

选项2

如果您经常需要该信息,则可以以某种持久性(RDBMS或DynamoDB)存储密钥

选项3

如果要排序的对象数量不是很大,那么显然您可以列出整个键集并筛选出所需的对象。但这将不是一个可扩展的高性能选项