CarrierWaveを使ってリモートファイルをローカルに保存してみる
かなりご無沙汰になってしまいましたが、久しぶりの更新です。
今回はPHPではなくRailsで、PaperClipと同じくらい利用率の高いCarrierWaveのちょっと便利な使い方です。
下準備
いつもどおりgemを追加します。
gem 'carrierwave'
次に適当にuplaoderを作ります。
bundle install && rails g uploader image
次はモデルをサクッと作り、mount_uplaoderしておく
rails g model user
mount_uploader :image, ImageUploader
やりたいことの前提
今回やりたかったのは、「CarrierWaveに画像の保存(ストア先)を任せてしまって、リモートにある画像ファイルをローカルに保持しておきたい」というのが前提です。
実際にやってみる
initializerとかscriptsとかタスクとかに以下のようなスクリプトを作ります。
uploader = ImageUploader.new uploader.download! 'http://doma.in/path/to/file' user = User.new user.image = uploader user.save
これでリモートのファイルをローカルに保存し、CarrierWaveのstore_dirに保存することが出来ます。
保存先をstore_dirに任せることで後のコード変更にも対応できるので、保守性は保たれるかと思います。
これに加えて、CarrierWaveにdownload!というメソッドがあったことを初めて知った。。。
ちなみに
いくら「CarrierWaveで画像を保存できる!」といっても、画像にも著作権はあります。
なので無闇矢鱈に保存して「俺TSUEEEEEEEEEEE!!」はせず、製作者に確認をし、了承を得た上でオトナの対応を行いましょう。