Playframework2.2 でファイルアップロードとか
結構みんな探しそう、、、というかきっとアクセス増えそうというあざとい意図で書いてみる。
で、HTTPからファイルを送信するパターンは二つ。
純粋に HTTP Request body にバイナリ突っ込む方法これは単純ですよね。
// routes に追加 // POST /simple controllers.Application.simple def simple = Action(parse.raw) { request => val message = new String(request.body.asBytes().get) Ok(message) }
UTF-8 のバイナリ文字列をStringに直して返すだけ。
とまぁ、REST っぽくバイナリ使うならこれでOKなわけだが、普通フォームからファイルアップロードするよね?
def multi = Action(parse.multipartFormData) { request => val formData = request.body val files = formData.files.map(f => { val source = Source.fromFile(f.ref.file, "UTF-8") val content = source.getLines().mkString("") source.close() (f.key, f.filename, content) }) println(s"DataPart : ${formData.dataParts}") println(s"File : ${files}") Ok() }
ということで、Multipart なんでこんなもの書いたかというと、今日
https://github.com/m3dev/curly
こんなの使って、確かどこかで直さないとと思った箇所があったけど、どこだったか思い出す為だったりする。
ああそうだ、FormData に binary を突っ込むところが未完成なんだ。