Rails3.2でドラッグ&ドロップするとファイルをアップロードできるようにしてみた。

大体のところは

http://kray.jp/blog/rails3-fileupload/

を参考にさせて頂きました。以下、いくつかハマった所だけ。


Webrickやmongrelなら問題ないが、unicornで走らせようとするとrequest.body.lengthがNoMethodErrorを返すので、request.body.sizeに変更する。
さらにtemp_fileの保存時にEncoding::UndefinedConversionErrorが発生するのでforce_encoding(‘utf-8′)を付ける。
以上を修正した_store_uploadメソッドはこんな感じ。

あと、元記事ではわざと単純にしてあるのだと思うけど、アップロード完了時のコールバックをlocation.reload();にすると複数ファイルをアップロードした時に中断してしまうので、ajaxで何かしら書く。こんな感じにした。

complete_actionにajaxで書き換えるアクションを指定しておいてevalするだけ。

Paperclip初めて使ったけど便利。DBへのblob保存に対応してないけど、確かにS3(+Cloudfront?)使う方が賢い気がするのでいいか。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>