AWS SDK for Rubyでのファイル関係のS3の操作です。一覧取得とファイルの取得の方法をメモ程度にまとめています。一覧取得については、基本的には2通りあってBucket.as_treeからツリー形式で取得する方法とBucket.objects.collectからキーの一覧を取得する方法があります。S3の構造をよくよく見てみると、フラット構造のものを擬似的にツリー構造にしているだけのようです。Bucket.objects.collectからフィルターして取得するのが効率が良いかもしれません。
require 'aws-sdk' AWS.config({ :access_key_id => 'your_access_key_id', :secret_access_key => 'your_secret_access_key', }) s3 = AWS::S3.new bucket = s3.buckets['yourbucketname'] tree = bucket.as_tree #ディレクトリ一覧 directories = tree.children.select(&:branch?).collect(&:prefix) directories.each{|directory| puts directory } #ファイル一覧 files = tree.children.select(&:leaf?).collect(&:key) files.each{|file| puts file } #キー一覧(ファイル&ディレクトリ一覧) puts "keys" keys = bucket.objects.collect(&:key) keys.each{|key| puts key } #サブフォルダ以下のファイルの一覧表示 puts "sub folder" tree = bucket.as_tree({:prefix => 'subfoldername/'}) files = tree.children.select(&:leaf?).collect(&:key) files.each{|file| puts file }
オブジェクトの取得
s3 = AWS::S3.new obj = s3.buckets['yourbucketname'].objects['filename'] #ファイルの書き込み obj.write('Hello World!') #パス指定でファイルの書き込み obj.write(:file => path_to_file) #ファイルの読み込み obj.read #認証付きURLの発行 puts obj.url_for(:read, :expires => 60) #seconds
後はStreamingアップロードや暗号化など色々な機能あります。公式のドキュメントを読めばひと通り書いてあるので、是非ご一読ください。
参照:
AWS SDK for Ruby