检查文件夹是否存在于 s3 存储桶中

ofe*_*oli 5 ruby amazon-s3 ruby-on-rails-3 ruby-on-rails-4

如何使用 Ruby on Rails 检查我的 s3 存储桶中是否存在某个文件夹?

我正在使用 AWS:S3 官方 gem 初始化全局连接后

AWS::S3::Base.establish_connection!(:access_key_id => 'my_key_id', :secret_access_key => ‘my_secret’) 
Run Code Online (Sandbox Code Playgroud)

我有一个名为: myfirstbucket

里面的文件夹命名为: my_folder

将 my_folder 中的文件命名为: my_pic.jpg

当我尝试检查是否my_pic.jpg存在时它工作得很好

s3object.exists? “/my_folder/my_pic.jpg” , “myfirstbucket”
=>  True
Run Code Online (Sandbox Code Playgroud)

如何仅检查文件夹是否存在?

s3object = AWS::S3::S3Object
s3object.exists? “/my_folder/” , “myfirstbucket”
=>  False
Run Code Online (Sandbox Code Playgroud)

SoA*_*Man 5

使用Bucket#objects

bucket.objects({prefix: 'my/folder/'}).limit(1).any?
Run Code Online (Sandbox Code Playgroud)

返回CollectionObjectSummary资源。在您调用集合上的可枚举方法之前,不会发出 API 请求。 Client#list_objects将被多次调用,直到每个 ObjectSummary都被产生。

http://docs.aws.amazon.com/sdkforruby/api/Aws/S3/Bucket.html#objects-instance_method

  • 这似乎是测试这种情况的唯一可能方法,因为文件夹“foo/”在技术上从不“存在”在 S3 中。文件夹的“存在”由键前缀匹配“foo/”的对象的存在有效定义。 (3认同)

Alb*_*bin 1

你可以用你的桶做一棵树。

\n\n

http://docs.aws.amazon.com/AWSRubySDK/latest/AWS/S3/Tree.html

\n\n
tree = bucket.as_tree\ntree.children.select(&:branch?).collect(&:prefix).include?(\xe2\x80\x9c/my_folder/\xe2\x80\x9d)\n
Run Code Online (Sandbox Code Playgroud)\n