我有一个 S3 存储桶demo
,里面有一个对象demo/somefolder
。当我调用s3.doesObjectExists("demo", "somefolder")
它时返回 false。但是,当我调用 时s3.listObjects("demo", "somefolder")
,ObjectListing
返回的 引用了S3ObjectSummary
.
对这里发生的事情有什么想法吗?
我从名称中假设somefolder
您描述的“对象”是一个“文件夹”而不是文件。
doesObjectExist(String bucketName, String objectName)
Run Code Online (Sandbox Code Playgroud)
这会测试带有 key 的特定对象objectName
。
listObjects(String bucketName, String prefix)
Run Code Online (Sandbox Code Playgroud)
这将返回键以 开头的所有对象的列表prefix
。
这是两个完全不同的测试。
如果您使用 S3 控制台创建了一个文件夹,s3.doesObjectExists("demo", "somefolder/")
则为 true(请注意尾部斜杠),但 S3 中的“文件夹”并不作为有意义的实体存在,并且这实际上不是 的有效使用s3.doesObjectExist()
。
控制台显示该文件夹somefolder
的原因只有一个:因为存储桶中存在一个或多个带有键前缀 的对象somefolder/
。但是为了便于在没有结构的存储桶中导航,控制台允许您通过“创建文件夹”来创建结构的外观...这实际上创建了一个 0 字节对象,并附加到/
您提供的任何名称的末尾(但是控制台抑制该对象本身的显示)。这些对象除了控制台导航之外没有其他用途。以编程方式上传的带有密钥的对象pics/cat.jpg
仍然会导致pics
“文件夹”出现在控制台中,而无需首先创建该占位符文件夹之类的对象......因此这些对象的存在或不存在并不是一个有意义的测试桶中是否存在这样的“文件夹”。
归档时间: |
|
查看次数: |
2896 次 |
最近记录: |