【问题标题】:Amazon AWS: How to replicate tree/branch functionality from AWS Ruby SDK v1 in AWS Ruby SDK v2?Amazon AWS:如何在 AWS Ruby SDK v2 中从 AWS Ruby SDK v1 复制树/分支功能?
【发布时间】:2015-03-26 17:22:24
【问题描述】:

在其 SDK 的第 1 版中,Amazon 提供了一些非常有用的方法,可用于使用 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']

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

【问题讨论】:

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


    【解决方案1】:

    树和分支功能通过使用前缀和分隔符列出存储桶中的对象来工作。前缀指定当前“文件夹”,分隔符应该是“/”以防止返回嵌套键。

    例如,列出存储桶的“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/']
    

    内容是响应中的文件或叶节点。 common_prefixes 是目录。如果您想继续向下查看“photos/family/portraits/”中的文件和文件夹,则只需再次使用不同的前缀#list_objects

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

    【讨论】:

    • 要获取文件夹,它是“resp.common_prefixes”,而不是“resp.contents.common_prefixes”
    • 好收获!没有额外“内容”调用的示例更新。
    • 警告:list_objects 最多只会返回 1000 个“文件”或“文件夹”,除非您添加额外的代码进行分页。
    猜你喜欢
    • 2015-05-18
    • 1970-01-01
    • 1970-01-01
    • 2020-03-18
    • 2015-12-26
    • 1970-01-01
    • 2021-04-23
    • 2016-07-29
    • 2013-12-04
    相关资源
    最近更新 更多