在s3存储桶中列出子文件夹文件路径

时间:2016-01-13 12:09:43

标签: java amazon-s3

我有一个s3结构如下:

s3bucketname - >一级密钥列表 - >二级密钥列表 - >三级密钥列表 - >实际文件。

我需要做的是,给定s3bucket的名称和第一级键和第三级的条目我需要所有符合条件的文件的路径,即某种二级键的通配符

有人可以指出如何在java中做到这一点吗?

由于

2 个答案:

答案 0 :(得分:0)

我建议你仔细阅读这些链接: http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/AmazonS3Client.html#listObjects%28com.amazonaws.services.s3.model.ListObjectsRequest%29

http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/model/ObjectListing.html#getCommonPrefixes%28%29

假设您的存储桶中有这样的层次结构:

"foo/bar/baz/sample1.txt"
"foo/bar/bash/sample2.txt"
"foo/bar/bang/sample3.txt"
"foo/boo/baz/sample4.txt"
"foo/boo/bash/sample6.txt"
"foo/boo/sample5.txt"

你知道第一个键是“foo”而第三个键是“baz”,你可以调用listObjects()api,前缀值为“foo /”,分隔符值为“/”,这将为您提供一个ObjectListing,在公共前缀列表中有两个条目是“foo / bar /”和“foo / boo /”。然后你可以将已知的第三个键说“bash”附加到每个字符串中,并再次使用listObjects()api获取所有对象。

答案 1 :(得分:0)

坦率地说,最简单的方法是获取具有已知前缀的所有对象的列表。然后,让您的代码查看返回的键,以找出您想要的键。这将涉及更少的AWS调用。