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

Mac*_*ill 3 ruby amazon-s3 amazon-web-services

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

tree = bucket.as_tree

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

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

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

Tre*_*owe 5

树和分支功能通过列出具有前缀和分隔符的存储桶中的对象来工作.前缀指定当前"文件夹",分隔符应为"/"以防止返回嵌套键.

例如,要列出存储桶"photos/family /"文件夹中的所有"文件"和"文件夹":

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/']
Run Code Online (Sandbox Code Playgroud)

内容是响应中的文件或叶节点.common_prefix是目录.如果你想继续查看"photos/family/portraits /"中的文件和文件夹,那么#list_objects再次使用不同的前缀:

resp = s3.list_objects(bucket:'bucket-name', prefix:'photos/family/portraits/', delimiter:'/')
Run Code Online (Sandbox Code Playgroud)