2013/09/16Scalaで書かれたWebフレームワークであるLiftを最近結構触っている。日本語の情報はおろか、英語の情報もそれ程豊富な訳じゃないんだけど、色々調べながらってのが結構面白い。今回はファイルのアップロード。ファイルアップロード"で検索するとこのページが出てきた。使うとアップロードされたファイルの内容を取得できるので、それを煮るなり焼くなり。詳しくは先ほどのページを参照。■CRUDと組み合わせLiftでCRUDをやるにはCRUDifyというtraitを使う。以前CRUDifyに関するエントリを書いたので、そちらを参照。Modelにバイナリのフィールドを追加してちょっと何かやればファイルアップロードが実現できるか、というと実はそんな事はなくて、いくつかの問題点がある。1つめは些細な問題だけど、CRUDifyで作られる<form>タグにmultipart属性が付いていないという問題。MLにも同様の話題があり解決策もそこで提示されている(こちら)。_createTemplateと_editTemplateというメソッドをオーバーライドして属性をつけるという、まぁかなり直接的なやり方。Null)}これで値が受け取れるようになる。一般的な選択肢としては、ファイル(やその他のStream)に書き込むかDBに書き込むかのどちらかだと思う。ファイルに書き込む例はこちらに出てる。DBに書き込む例は、まとまってる情報がなかったので次の項で説明。ファイルアップロードに関する注意事項として、Shtml.fileUploadはファイルアップロードが完了されてからセットされるので、巨大なファイルのアップロードには使えない。巨大なファイルをStreamで受け取りつつファイルに書き込むと言う事は出来ない。■受け取ったファイルをDBに書き込むもっと良い方法があるかもしれないけど、とりあえず自分がやった方法。上の方で紹介したMLのやりとりを参考にした。Modelにバイナリのフィールド、アップロードされたファイルをチェックしてそのバイナリフィールドにセットするメソッドを定義する。具体的には以下のようになる。false}}■おわりにアップロードされた画像をDBに格納するところは以上で完了。後は、それを画面に表示させたい。それについては今後書く予定。この辺とか参考になる。コメントをキャンセルメールアドレスが公開されることはありません。