読者です 読者をやめる 読者になる 読者になる

謎言語使いの徒然

適当に気になった技術や言語を流すブログ。

Playframework2.2 でファイルアップロードとか

scala 勉強 Playframework

結構みんな探しそう、、、というかきっとアクセス増えそうというあざとい意図で書いてみる。

で、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 を突っ込むところが未完成なんだ。