仅列出s3存储桶中的子文件夹
我有一个s3结构如下:
s3bucketname -> List of first level keys -> List of second level keys -> List of third level keys -> Actual file.
我需要做的是,给定s3bucket的名称和第一级密钥的条目,我需要位于第一级密钥下的所有二级密钥的名称。 所以基本上如果我们把它看作文件夹,我会得到root folder
的名称,即s3bucketname
和其子subfolder1
夹subfolder1
的名称,我想列出子subfolder1
1中的所有文件subfolder1
。 只是名字,而不是完整的路径。
有人可以指出如何使用亚马逊的java sdk在java中做到这一点吗?
谢谢
我做了以下代码似乎工作正常,您必须传递prefix
并确保前缀以/结尾,并且还指定要获取子目录列表的分隔符。 以下应该有效:
public List 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
我写了一个扩展,通过分页支持巨大的列表。
public List getSubPathsInS3Prefix(String bucketName, String prefix) { if (!prefix.endsWith(FILE_DELIMITER)) { prefix += FILE_DELIMITER; } List paths = new ArrayList (); 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/
- 亚马逊S3列出“目录”
- com.amazonaws.services.s3.model.AmazonS3Exception:Forbidden(Service:Amazon S3; Status Code:403; Error Code:403 Forbidden; Request ID:XXXXXXXX)
- 我可以更新现有的Amazon S3对象吗?
- 如何通过CloudFront将对象放到S3
- 使用Java API的S3 / AWS的SSL问题:“证书中的主机名不匹配”
- 如何从Java中的MIME类型确定适当的文件扩展名
- S3 Java客户端因“Content-Length delimited message body的过早结束”或“java.net.SocketException Socket closed”而失败了很多
- S3:如果由其他用户创建,则用户无法访问自己的s3存储桶中的对象
- 如何比较本地文件与Amazon s3文件