前提
- Rails3を使ったWebアプリをheroku上で稼働させている
- base64エンコーディングされて、POSTのパラメータとして渡ってきたmp3ファイルをAmazon S3に配置することを想定
- 事前にAWSのアカウントとcredentialsは取得済
手順
1. 初期化ファイルをconfig/initializers以下に追加
config/initializers/aws.rb
# aws-sdk用の設定初期化 # load the libraries require 'aws' # log requests using the default rails logger AWS.config(:logger => Rails.logger) # load credentials from a file config_path = File.expand_path(File.dirname(__FILE__)+"/../aws.yml") AWS.config(YAML.load(File.read(config_path)))
2. 設定ファイルをconfig/以下に追加
config/aws.yml
# aws-sdkとpaperclipのAWS保存用の設定ファイル。 development: access_key_id: xxxxx secret_access_key: xxxxx test: access_key_id: xxxxx secret_access_key: xxxxx production: access_key_id: xxxxx secret_access_key: xxxxx
3. ファイルをS3に配置するロジックを追加
hogehoge_controller
(実際はモデルなどにロジックを移動するべし)
#require 'aws-sdk'が必要 input_mp3_data =params[:mp3_binary_data] mp3_data = Base64.strict_decode64(input_mp3_data) s3 = AWS::S3.new bucket = s3.buckets['AMAZON_S3_BUCKET_NAME'] #AMAZON_S3_BUCKET_NAMEは自分のバケット名に変える key = 'AMAZON_S3_MP3_FILE_ROOT' + 'file.mp3' object = bucket.objects[key] object.write( mp3_data, #一つ目の引数でバイナリを渡してしまえば良い { :acl => :private, #非公開にする場合、ここで:privateを指定しておく :content_type => 'audio/mp3' } )