Amazon AWS:如何在AWS Ruby SDK v2中从AWS Ruby SDK v1复制树/分支功能?

时间:2015-03-26 17:22:25

标签: ruby amazon-web-services amazon-s3

在他们的SDK的第1版中,亚马逊提供了一些非常有用的方法,可以使用Tree,ChildCollection,LeafNode,BranchNode等来探索存储桶的内容。不幸的是,我很难复制他们的SDK版本2的功能,似乎不包括这些方法。理想情况下,我想做类似于下面示例的操作,该示例取自the v1 SDK

tree = bucket.as_tree

directories = tree.children.select(&:branch?).collect(&:prefix)
#=> ['photos', 'videos']

files = tree.children.select(&:leaf?).collect(&:key)
#=> ['README.txt']

关于如何实现这一目标的任何想法?

1 个答案:

答案 0 :(得分:5)

树和分支功能通过在带有前缀和分隔符的存储桶中列出对象来工作。前缀指定当前"文件夹"并且分隔符应该是' /'防止返回嵌套键。

例如,列出所有"文件"和"文件夹"在"照片/家庭/"桶的文件夹:

s3 = Aws::S3::Client.new
resp = s3.list_objects(bucket:'bucket-name', prefix:'photos/family/', delimiter:'/')

# the list of "files"
resp.contents.map(&:key)
#=> ['photos/family/summer_vacation.jpg', 'photos/family/parents.jpg']

# the list of "folders"
resp.common_prefixes
#=> ['photos/family/portraits/', 'photos/family/disney_land/']

内容是响应中的文件或叶节点。 common_prefix是目录。如果您想继续查看"照片/家庭/肖像/"中的文件和文件夹,然后再使用不同的前缀再次#list_objects

resp = s3.list_objects(bucket:'bucket-name', prefix:'photos/family/portraits/', delimiter:'/')