我似乎不明白这是如何工作的。
假设我有以下结构:
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,公共(public)前缀包含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
但我的问题是,为了模拟目录,我们在其中放置空内容的对象,并在末尾添加“/”,这意味着我可以拥有同名的文件和目录。那我该如何区分呢?
最佳答案
多个对象不能具有相同的键。
这意味着您使用给定键添加的最新内容获胜。不可能混淆同名的“文件夹”和"file"。
实际上,S3 中没有文件夹的概念,控制台只是因为文件系统的工作原理而给我们这样的印象。如果您将 S3 视为键/值对数据库,那就更好了。
关于java - 区分同名的文件和文件夹 aws s3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61390599/