2013-04-11 18 views
20

Fogを使用して特定のS3 "ディレクトリ"内のすべてのファイルを一覧表示するにはどうすればよいですか?RubyでFogを使用してS3フォルダ内のすべてのファイルを一覧表示する方法

私はS3がファイルをフォルダに格納しないことを知っていますが、バケット内のリスト全体を取得するのではなく、返されたファイルを特定の「フォルダ」に限定する方法が必要です。

答えて

36

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 
+1

「接頭辞」は、少なくとも構造的に言えば、実際には接尾辞であることに気付くはずです。ネストされたバケットへのパスが 'foo/bar'の場合、メソッド呼び出しは '.get( 'foo'、prefix: 'bar')'となります。 – pdoherty926

+0

バケット名がパスの一部であるとは思わない場合、pdoherty926のメモはちょっと混乱します。 – Amir

+1

ここでは、 '.map'を呼び出すとALLは返されず、AWS APIによって返されるページは1つのみしか返されないというケースがあります。ファイル上での各ファイルの呼び出しは、ファイルがたくさんある可能性があるため、Fogにメモリ消費を管理させます。 – rposborne

関連する問題