Amazon S3 - 列出没有层次结构摘要的所有对象

时间:2017-08-14 16:15:54

标签: java amazon-s3

为了它的价值,Amazon S3库正用于在HCP上执行操作。也许这限制了我们可以使用的Amazon S3版本或更改文件夹的解释。我的理解是,Amazon S3和HCP都可以将完整路径确认为对象并忽略文件夹,但是我很难得到我的请求。

说我有:

  • 什么/在/在这里/ object1
  • 东西/上方/有/ Object2的
  • 某处/远/ object3

我希望每个对象都在/。这是我的请求尝试:

ListObjectsRequest listSomeObjects= new ListObjectsRequest()
.withBucketName("bucket")
.withDelimiter("/")
.withPrefix("something/")
.withMaxKeys("100") // maybe not necessary since it stops at 1000
.withMarker(null); // to be used after first request, I imagine
ObjectListing objectsReturned = this.hs3Client.listObjects(listSomeObjects);

objectsReturned给了我一些选择:

  • getCommonPrefixes() - 如果我包含分隔符,则返回/ over。否则,似乎是空的。
  • getObjectSummaries() - 使用分隔符,只返回对某些东西/及其自身的对象。在这种情况下,它只有自己。如果没有分隔符,则返回一些对象摘要列表,其中包含/ /,某些/ over / here,something / over / there /,something / over / here / object1,something / over / there / object2。
  • getBucketName(),getMarker(),getMaxKeys(),getDelimiter(),getNextMarker(),getPrefix() - 这些似乎不是我需要的东西

我只需要一个完整对象名称的列表:something / over / here / object1,something / over / there / object2

循环遍历所有getObjectSummaries()以过滤结果将是最后的手段。使用大量的小请求来考虑子文件夹可能甚至不适用于我们的用例。有没有办法获得具有公共前缀的完整对象名称列表,而无需通过getObjectSummaries()中的所有键?

2 个答案:

答案 0 :(得分:0)

您使用的是哪个亚马逊图书馆版本?

我可以告诉你,我一直在使用

AmazonS3.listObjects(String bucketName, String prefix)

我只收到了现有匹配键的列表。只有实际的对象,而不是“虚拟文件夹”子路径(使用getObjectSummaries方法)

据我所知,这相当于你的代码,但是没有分隔符(保留maxkeys)。

我使用的是版本1.10.52,以防它重要(会很惊讶)。

答案 1 :(得分:0)

删除.withDelimiter("/")选项可以获得前缀

下的所有对象