java - 具有相同名称aws s3的文件和文件夹之间的区别
问题描述
我似乎不明白这是如何工作的。
假设我有以下结构:
s3:/bucket1/file1
s3:/bucket1/file2
s3:/bucket1/dir1/file3
s3:/bucket1/dir1/file4
现在,当我想列出所有内容(包括“目录”,例如 dir1)时,我可以这样做:
ListObjectsRequest listObjectsRequest = new ListObjectsRequest()
.withBucketName("bucket1")
.withPrefix("")
.withDelimiter("/");
return awsS3Client.listObjects(listObjectsRequest);
这里 Objectsummaries 包含 file1 和 file2,公共前缀包含 dir1
并列出 /bucket1/dir1 的内容,我可以这样做
ListObjectsRequest listObjectsRequest = new ListObjectsRequest()
.withBucketName("bucket1")
.withPrefix("dir1/")
.withDelimiter("/");
return awsS3Client.listObjects(listObjectsRequest);
现在,如果我想检查某个文件夹是否存在,我可以这样做:
ListObjectsRequest listObjectsRequest = new ListObjectsRequest()
.withBucketName("bucket1")
.withPrefix("dir1/")
.withDelimiter("/");
return awsS3Client.listObjects(listObjectsRequest).getObjectSummiaries().size() > 0;
在这里,我检查是否找到了一个对象。
我想检查是否存在某些文件:
ListObjectsRequest listObjectsRequest = new ListObjectsRequest()
.withBucketName("bucket1")
.withPrefix("file1")
.withDelimiter("/");
return awsS3Client.listObjects(listObjectRequest).getObjectSummaries().size() == 1
但我的问题是,为了模拟目录,我们将内容为空的对象放入其中,并在末尾添加“/”,这意味着我可以拥有同名的文件和目录。在那种情况下,我将如何区分它?
解决方案
您不能有多个具有相同键的对象。
这意味着您使用给定密钥添加的最新内容将获胜。不可能混淆同名的“文件夹”和“文件”。
实际上,S3 中没有文件夹的概念,控制台只是因为文件系统的工作方式而给我们的印象。最好将 S3 视为键/值对数据库。
推荐阅读
- c++ - C ++在向量中查找重复符号
- openfire - 支持明火离线通话?
- reactjs - 用于与 Typescript 反应的 Facebook 客户聊天插件
- reactjs - 如何在 ReactRedux 中使用 combineReducer?并且 combineReducers 的 'sate' 对象到多个 reduce
- azure - BadRequestObjectResult 不向客户端返回详细的错误消息
- javascript - 将 mailchimp 与 nuxt js 应用程序集成
- php - php mysql atomic '选择和删除'表
- python - 使用用户输入从类中获取信息
- html - 如何在 Shopify 中自定义收藏?
- google-cloud-platform - gsutil 命令每次在 Windows 10 上崩溃