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

时间:2016-07-09 19:03:10

标签: ruby ruby-on-rails-3 ruby-on-rails-4 amazon-s3

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

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

AWS::S3::Base.establish_connection!(:access_key_id => 'my_key_id', :secret_access_key => ‘my_secret’) 

我的名字为:myfirstbucket

将文件夹命名为:my_folder

my_folder中的文件名为:my_pic.jpg

当我尝试检查my_pic.jpg是否存在时,它可以正常工作

s3object.exists? “/my_folder/my_pic.jpg” , “myfirstbucket”
=>  True

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

s3object = AWS::S3::S3Object
s3object.exists? “/my_folder/” , “myfirstbucket”
=>  False

3 个答案:

答案 0 :(得分:4)

使用Bucket#objects

bucket.objects({prefix: 'my/folder/'}).limit(1).any?
  

返回CollectionObjectSummary个资源。没有API请求   直到你在集合上调用一个可枚举的方法。   Client#list_objects将被多次调用,直到每次   ObjectSummary已经屈服了。

     

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

答案 1 :(得分:3)

你必须检查

  1. 带有斜杠的对象键" /"存在
  2. 如果不存在,目录中是否有任何项目?
  3. 例如: 你有文件" my_file"在文件夹" my_folder"。 my_folder/my_file。

    所以你必须检查两次

    my_folder/

    请参阅文档:http://docs.aws.amazon.com/AmazonS3/latest/UG/FolderOperations.html

答案 2 :(得分:1)

你可以从你的桶里做一棵树。

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

tree = bucket.as_tree
tree.children.select(&:branch?).collect(&:prefix).include?(“/my_folder/”)