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)
关于如何实现这一目标的任何想法?
树和分支功能通过列出具有前缀和分隔符的存储桶中的对象来工作.前缀指定当前"文件夹",分隔符应为"/"以防止返回嵌套键.
例如,要列出存储桶"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)
| 归档时间: |
|
| 查看次数: |
369 次 |
| 最近记录: |