【问题标题】:list all the files from s3 using aws-sdk gem使用 aws-sdk gem 列出 s3 中的所有文件
【发布时间】:2014-06-16 11:30:33
【问题描述】:

我有以下情况。 考虑在我的情况下 aws s3 文件夹结构如下

- videos
  - my_videos
    - college

我已经在college 上传了视频文件myfirst_day.mp4,因为这个相关的形成密钥是"videos/my_videos/college/myfirst_day.mp4"

现在我必须列出videos/my_videos/college 目录中的所有文件。 我该怎么做。

为此,我正在使用 aws-sdk gem

【问题讨论】:

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


    【解决方案1】:

    您可以简单地遍历bucket objects 并使用with_prefix 方法

    s3.buckets[YOUR BUCKET NAME].objects.with_prefix('videos/my_videos/college').each.collect(&:key)
    #=> ["videos/my_videos/college/myfirst_day.mp4"]
    

    或使用as_tree 方法

    s3.buckets[YOUR BUCKET NAME].as_tree(prefix:'videos/my_videos/college').select(&:leaf?).collect(&:key)
     #=> ['videos/my_videos/college/myfirst_day.mp4']
    

    显然这些都是虚构的,因为我无法访问您的存储桶,但请查看 ObjectCollectionTree 以了解 AWSSDK 中的更多方法。

    有很多可用的桶遍历方法,例如Tree响应children,它将列出LeafNodes(文件)和BranchNodes(目录)。然后BranchNodes 也将响应children,因此您可以在需要时进行递归。

    要获得suffix(例如,只是文件名),您可以修补这些。

    class LeafNode
      def suffix
        @member.key.split(delimiter).pop
      end
    end
    class S3Object
      def suffix
        @key.split("/").pop
      end
    end
    

    我还没有以任何方式对这些进行全面测试,但如果文件名嵌套在分支中,它们应该可以只返回文件名本身。

    【讨论】:

    • 我也在做同样的事情。有没有办法只获取文件名,而不是整个路径?
    • @theTuxRacer 有一个 prefix 方法,但我没有看到 suffix 方法,尽管这将是一个简单的补丁,我已经更新了我的澄清答案
    • 感谢您抽出宝贵时间回答我的问题。这就是我最终所做的:)
    • @theTuxRacer 没问题。很高兴它对你有用,这似乎应该是 gem 的一部分,因为我相信你不是唯一想要这个功能的用户。
    • 嗨@engineersmnky 我看了这个答案,这解释了为什么我们得到了 OP。这是我第一次读到它,并在此处发布,假设您也不知道:stackoverflow.com/a/20012200/174936 抱歉,如果不是这样。谢谢。
    猜你喜欢
    • 2013-10-23
    • 2018-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-23
    • 1970-01-01
    • 2016-08-26
    • 1970-01-01
    相关资源
    最近更新 更多