仅列出 s3 存储桶中的子文件夹

新手上路,请多包涵

我有一个 s3 结构如下:

 s3bucketname -> List of first level keys -> List of second level keys -> List of third level keys -> Actual file.

我需要做的是,给定 s3bucket 的名称和一级密钥的条目,我需要位于一级密钥下的所有二级密钥的名称。所以基本上,如果我们把它看成一个文件夹,我会得到 s3bucketname root folder 名称 subfolder1 ,我想列出位于 subfolder1 中的所有文件夹。不过只是名字,不是完整的路径。

有人可以指出如何使用亚马逊的 java sdk 在 java 中做到这一点吗?

谢谢

原文由 sc_ray 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 794
2 个回答

我做了以下似乎工作正常的代码,你必须传递 prefix 并确保前缀以 / 结尾,并指定你想要获取子目录列表的分隔符。以下应该工作:

 public List<String> listKeysInDirectory(String bucketName, String prefix) {
    String delimiter = "/";
    if (!prefix.endsWith(delimiter)) {
        prefix += delimiter;
    }

    ListObjectsRequest listObjectsRequest = new ListObjectsRequest()
            .withBucketName(bucketName).withPrefix(prefix)
            .withDelimiter(delimiter);
    ObjectListing objects = _client.listObjects(listObjectsRequest);
    return objects.getCommonPrefixes();
}

原文由 Charles Menguy 发布,翻译遵循 CC BY-SA 3.0 许可协议

Charles版超简洁!谢谢@charles-menguy

我写了一个扩展来通过分页支持巨大的列表。

     public List<String> getSubPathsInS3Prefix(String bucketName, String prefix) {
        if (!prefix.endsWith(FILE_DELIMITER)) {
            prefix += FILE_DELIMITER;
        }
        List<String> paths = new ArrayList<String>();
        ListObjectsRequest listObjectsRequest = new ListObjectsRequest()
                .withBucketName(bucketName).withPrefix(prefix)
                .withMaxKeys(1000).withDelimiter(FILE_DELIMITER);
        ObjectListing currentListing = s3Client.listObjects(listObjectsRequest);
        paths.addAll(currentListing.getCommonPrefixes());

        while (currentListing == null || currentListing.isTruncated()) {
            currentListing = s3Client.listNextBatchOfObjects(currentListing);
            paths.addAll(currentListing.getCommonPrefixes());
        }
        return paths;
    }

http://www.lazywiz.com/uncategorized/s3-missing-api-list-sub-paths-in-the-s3-bucket/

原文由 lazywiz 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题