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



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

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

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

使用 Bucket#objects

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

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

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

你必须

检查

  1. 存在带有尾部斜杠"/"的对象键
  2. 如果不存在,目录中是否有任何项目?

例如:您在文件夹"my_folder"下有文件"my_file"。AWS S3 记录my_folder/my_file将存在于外部,但my_folder/可能不存在。

所以你必须检查两次

if bucket.object("my_folder/").exists?
  true
else
  bucket.objects({prefix: "my_folder/"}).limit(1).any?
end

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新