【问题标题】:aws s3 java sdk list objectsaws s3 java sdk 列表对象
【发布时间】:2017-06-29 11:28:22
【问题描述】:

我的结构是这样的:

common/test/v20170522/part-0001.snappy
common/test/v20170522/part-0002.snappy
common/test/v20170522/part-0003.snappy
common/test/v20170522/part-0004.snappy
common/test/v20170622/part-0001.snappy
common/test/v20170622/part-0002.snappy
common/test/v20170622/part-0003.snappy
common/test/v20170622/part-0004.snappy

有更多的版本文件夹,其中包含更多的文件。我基本上想要test/common 文件夹中所有文件夹的列表:所以v20170522, v20170622, etc

这是我目前所拥有的:

ListObjectsRequest listObjectsRequest = new ListObjectsRequest();
listObjectsRequest.setBucketName("common");
listObjectsRequest.setPrefix("test/");
listObjectsRequest.setDelimiter("/");

这只会返回common/test 文件夹中的文件,而不是文件夹。当我删除分隔符时,我得到所有文件夹的所有子文件。有没有办法做到这一点?

【问题讨论】:

  • getCommonPrefixes()?
  • 是的,就是这样!谢谢!
  • 太好了,很高兴它有帮助。已添加更多上下文作为答案。

标签: amazon-web-services aws-java-sdk


【解决方案1】:

重要的是要知道 S3 不是常规文件系统,并且列表操作的工作方式与您可能期望的略有不同。

在调用 listObjects 时,您指定:

  • prefix 将结果限制为仅以指定前缀开头的那些键
  • delimiter 导致 listObjects 将共享公共前缀的所有键汇总到单个摘要列表结果中

您应该在返回的公共前缀中找到“文件夹”,可通过getCommonPrefixes() 访问。

欲了解更多信息,请参阅Listing Keys using Prefix and Delimiter

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-24
    • 2015-08-23
    • 2011-09-25
    • 2020-08-08
    • 1970-01-01
    • 2018-06-12
    • 1970-01-01
    • 2018-11-01
    相关资源
    最近更新 更多