AWS Ruby SDK,检查密钥是否存在总是给出“false”

Lee*_*fin 0 ruby amazon-s3 amazon-web-services

在AWS S3中,我有一个名为 的存储桶my-bucket,我正在使用AWS Ruby SDK来访问我的存储桶。

my-bucket我在S3中有以下目录结构(我知道它在S3中不称为“目录”,只是为了展示这个想法):

my-bucket/
    customers/
         products/
              - data1.txt
              - data2.txt
              ...
Run Code Online (Sandbox Code Playgroud)

我想检查my-bucket/customers/productsAWS Ruby SDK 是否存在,我尝试了以下代码:

s3 = Aws::S3::Resource.new
bucket = s3.bucket("my-bucket")
result = bucket.object("customers/products").exists?
Run Code Online (Sandbox Code Playgroud)

但是resultfalse即使我在 S3 中有该目录,我哪里错了?

Mar*_*k B 5

那是因为“客户/产品”并不作为对象存在。它只是某些确实存在的对象的前缀。你说:

我知道它在S3中不被称为“目录”

然而,它不仅仅是 S3 中目录的不同术语。S3 中根本不存在目录(或文件夹)。只有带有键的对象。它就像一个单一的平面目录,其中的文件名可以包含斜杠字符。

为了方便起见,大多数 S3 浏览应用程序会将键名称中的斜杠解释为“目录”,并以文件系统等分层方式显示对象,但这些目录/文件夹实际上并不存在于 S3 中。

正如另一个答案中所指出的,最好的选择是检查是否存在包含该前缀的任何对象。