如何使用 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
检查
- 存在带有尾部斜杠"/"的对象键
- 如果不存在,目录中是否有任何项目?
例如:您在文件夹"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/”)