Nullyのぶろぐ

仙台で働くエンジニアの日記

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!!」はせず、製作者に確認をし、了承を得た上でオトナの対応を行いましょう。