2012年4月18日水曜日

ちょっと感動したファイルアップロード

画像のアップロードを「dragonfly」ってヤツでやってみた。
実装してみて、ちょころビット感動を覚えたので、忘れないうちに...

メモ、めも...

◆なぜに、dragonfly ??
Rails2.xのころは、file_column を利用していた。
あつかったアプリ(他社が開発)が使っていたから..
いろいろテクニックも覚え、それなりに重宝していたのだが、
画像アップロード時点で、必要なサイズを作ってしまうことから、
デザイン変更のたびに、古いサイズと新しいサイズが混在する
時期が発生したり、再登録作業を終えてからリリースしたりと、
なにかと苦労してしまう。

...なにかいいものは...とグーぐる先生へ。

見つけたのが、この dragonfly !!
こいつは、表示時に、必要なサイズへとリサイズしてくれるらしい。

これなら、VIEWの変更だけですむハズ...と、利用してみる。



◆インストール
めっちゃ簡単!

Gemfile に追加して、インストールし、ちょっとだけ設定すればいい。
前提として、OSへ、image-magick が、インストール済みとします。
(もちろんディレクトリはアプリルートですよぉ)

  1. vi Gemfile
      gem 'rack-cache', :require => 'rack/cache'
      gem 'dragonfly', '~>0.9.8'
  2. bundle install
  3. vi config/initializers/dragonfly.rb
      require 'draginfly/rails/images'
        ※起動時に、 dragonfly を読み込ませるため
            initializersにファイルを作成。
◆テーブル関連

  1. アップロード先のモデルに以下を追加する。

      class table < ActiveRecord::Base
        
    image_accessor :image
        
      end
  2. テーブルに項目を追加。
     
       image_name : string
       image_uid : string
◆アップロード

   <%= f.file_field :image %>



◆表示

  1. そのまま
    <%= image_tag @table.image.url %>
  2. 縮小、拡大
    強制的に...    <%= image_tag @table.image.thumb('500x300!').url %>
                     <%=  image_tag @table.image.process(:thumb, '700x200!').url %>
    縦横比維持... <%=  image_tag @table.image .process(:thumb, '700x200').url %>
  3. 変換
    <%= image_tag @table.image.jpg.url %>
    <%= image_tag @table.image.process(:greyscale).encode(:tiff).url %>