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?)使う方が賢い気がするのでいいか。

コメントを残す

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

2019 Proxima Fermata. All rights reserved.
Design by picomol. Powered by WordPress.
hello