亚马逊S3列出“目录”
我通过AWS S3管理控制台在S3中创建了一个层次结构。 如果我运行以下代码来列出存储桶:
AmazonS3 s3 = new AmazonS3Client(CRED); ListObjectsRequest lor = new ListObjectsRequest() .withBucketName("myBucket") .withPrefix("code/"); ObjectListing objectListing = s3.listObjects(lor); for (S3ObjectSummary summary: objectListing.getObjectSummaries()) { System.out.println(summary.getKey()); }
我明白了:
code/ code/03000000-0001-0000-0000-000000000000/ code/03000000-0001-0000-0000-000000000000/special.js code/03000000-0001-0000-0000-000000000000/test.js code/03000000-0002-0000-0000-000000000000/
这正是我所期待的。 如果我添加一个分隔符,所以我只在“代码/”下直接列出内容我现在不会得到任何子“目录”。
更改上面的行(在末尾添加withDelimiter()):
ListObjectsRequest lor = new ListObjectsRequest().withBucketName("myBucket") .withPrefix("code/") .withDelimiter("/");
我现在只得到:
code/
我知道S3没有“目录”,而是分隔键,但这种行为看起来很奇怪? 我如何列出仅在“代码”下方的内容?
如果你有没有内容的密钥S3认为它们是“公共前缀”:
public List getCommonPrefixes()
获取此对象列表中包含的公共前缀。 只有在原始请求中指定了分隔符时,才会显示公共前缀。
每个公共前缀表示S3存储桶中的一组键,这些键已从对象汇总结果中压缩并省略。 这允许应用程序按层次组织和浏览其密钥,类似于文件系统将文件组织到目录中的方式。
例如,考虑包含以下键的存储桶:
为 “foo /酒吧/ baz” 的
为 “foo /酒吧/庆典”
为 “foo /酒吧/砰”
“富/ BOO”如果在此存储桶上调用带有前缀=“foo /”和delimiter =“/”的listObjects,则返回的S3ObjectListing将在公共前缀列表(“foo / bar /”)中包含一个条目,并且没有任何以该条开头的键公共前缀将包含在对象摘要列表中。
返回:此对象列表中包含的公共前缀列表,如果未找到公共前缀,则可能是空列表。
- 我可以更新现有的Amazon S3对象吗?
- 使用AWS Java SDK为现有S3对象设置Expires标头
- com.amazonaws.services.s3.model.AmazonS3Exception:Forbidden(Service:Amazon S3; Status Code:403; Error Code:403 Forbidden; Request ID:XXXXXXXX)
- AWS S3无需访问和密钥在Java中上载
- 使用进度回调将文件或InputStream上载到S3
- 将Maven依赖项部署到S3:没有可用的连接器
- 编写Big JSON文件以避免OutOfMemory问题的最佳方法
- 使用REST从s3存储桶下载文件
- 如何使用REST API和数据库扩展Java应用程序?