【问题标题】:How to list all files in an S3 folder using Fog in Ruby如何在 Ruby 中使用 Fog 列出 S3 文件夹中的所有文件
【发布时间】:2013-04-04 01:46:02
【问题描述】:

如何使用 Fog 列出特定 S3“目录”中的所有文件?

我知道 S3 不会将文件存储在文件夹中,但我需要一种方法将返回的文件限制在特定的“文件夹”中,而不是检索存储桶中的整个列表。

【问题讨论】:

    标签: ruby amazon-s3 fog


    【解决方案1】:

    在 directory.get 方法中使用prefix 选项。示例:

    def get_files(path, options)
      connection = Fog::Storage.new(
        provider: 'AWS',
        aws_access_key_id: options[:key],
        aws_secret_access_key: options[:secret]
      )
      connection.directories.get(options[:bucket], prefix: path).files.map do |file|
        file.key
      end
    end
    

    【讨论】:

    • 可能值得注意的是prefix实际上的后缀,至少在结构上是这样。如果嵌套存储桶的路径是“foo/bar”,那么您的方法调用将是:.get('foo', prefix: 'bar')
    • 如果您不认为存储桶名称是路径的一部分,pdoherty926 的注释会有点混乱。
    • 这里有一个极端情况,调用 .map 不会返回 ALL,而只会返回 AWS api 返回的单个页面。对文件调用 .each 将使 Fog 管理内存消耗,因为可能有很多文件。
    • @rposborne 好点。我认为在一个非常大的文件夹的情况下,使用 .each 并传递一个你想对文件做什么的块将是处理这种情况的最佳模式。
    • 嗨,我知道这是旧的,但有人知道如何控制排序顺序吗?我使用 UUID 作为我的文件名并意识到它按字母顺序返回而不是上传时间:(
    猜你喜欢
    • 2013-10-23
    • 2019-05-26
    • 2012-08-12
    • 1970-01-01
    • 2017-01-06
    • 2011-10-27
    • 2019-11-02
    • 1970-01-01
    • 2014-03-06
    相关资源
    最近更新 更多