在AWS S3中,我有一个名为my-bucket
的存储桶,我使用AWS Ruby SDK来访问我的存储桶。
在my-bucket
下我在S3中有以下目录结构(我知道它没有被调用"目录"在S3中,但只是为了显示这个想法):
my-bucket/
customers/
products/
- data1.txt
- data2.txt
...
我想检查AWS Ruby SDK是否存在my-bucket/customers/products
,我尝试了以下代码:
s3 = Aws::S3::Resource.new
bucket = s3.bucket("my-bucket")
result = bucket.object("customers/products").exists?
但是result
给了false
,即使我在S3中有那个目录,我错了吗?
答案 0 :(得分:3)
那是因为“客户/产品”不作为对象存在。它只是存在的某些对象的前缀。你说:
我知道它在S3中没有被称为“目录”
然而,它不仅仅是S3中目录的不同术语。 S3中根本不存在目录(或文件夹)。只有带钥匙的物体。它就像一个单独的平面目录,您的文件名可以在其中包含斜杠字符。
为了方便起见,大多数S3浏览应用程序会将键名中的斜杠解释为“目录”并以分层方式显示对象,如文件系统,但这些目录/文件夹实际上并不存在于S3中。
正如另一个答案中所指出的,最好的办法是检查是否存在包含该前缀的任何对象。
答案 1 :(得分:0)
使用
bucket.objects.with_prefix("customers/products").any?
答案 2 :(得分:0)
在 Ruby sdk V2 中,未定义方法with_prefix
:
提供了一个具有以下键的对象: dir1 / dir2 / object.jpg
尝试类似以下内容
bucket.objects(prefix: 'dir1/dir2').any?
或直接检查对象是否存在
bucket.object('dir1/dir2/object.jpg').exists?