技術をかじる猫

適当に気になった技術や言語、思ったこと考えた事など。

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