この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。
Railsで画像アップロード等を行うにはCarrierWaveを使用するのが便利であるが、これは特定のモデルに紐づくファイルをアップロードする事が基本的な使用方法である。 それに対して、ただ単純に(特定のモデルに紐付かない)ファイルをIDCFオブジェクトストレージへアップロードしたりIDCFオブジェクトストレージからダウンロードしたりするという用途においては、 Gem「fog」を利用すれば簡単に実装できるようになる。
Gemfile
gem 'fog'
アップロード方法
file_uploader = Fog::Storage.new(
provider: 'AWS', # IDCFでもAWSと記述
path_style: true,
host: 'ds.jp-east.idcfcloud.com',
port: 443,
scheme: 'https',
aws_access_key_id: 'XXX', # アクセスキー
aws_secret_access_key: ENV['SECRET_IDCF_SECRET_KEY'],
region: 'ap-northeast-1', # 東京
aws_signature_version: 2
)
file_uploader.put_object(
'XXX', # バケット名
'/tmp/xxx/xxx.xxx', # ファイルのフルパス
'XXX' # ファイル内容(パラメータで受け取る場合は、そのままparams[:xxx]等)
)
ダウンロード方法
file_uploader = ... # アップロード方法と同内容なので省略
File.open(file_full_path, 'w') do |f|
f.write file_uploader.get_object(
'XXX', # バケット名
'/tmp/xxx/xxx.xxx' # ファイルのフルパス
).data[:body]
end