【发布时间】:2013-04-04 01:46:02
【问题描述】:
如何使用 Fog 列出特定 S3“目录”中的所有文件?
我知道 S3 不会将文件存储在文件夹中,但我需要一种方法将返回的文件限制在特定的“文件夹”中,而不是检索存储桶中的整个列表。
【问题讨论】:
如何使用 Fog 列出特定 S3“目录”中的所有文件?
我知道 S3 不会将文件存储在文件夹中,但我需要一种方法将返回的文件限制在特定的“文件夹”中,而不是检索存储桶中的整个列表。
【问题讨论】:
在 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')。
.map 不会返回 ALL,而只会返回 AWS api 返回的单个页面。对文件调用 .each 将使 Fog 管理内存消耗,因为可能有很多文件。