Unfilteredでファイルアップロード

Unfilteredでファイルアップロードを行うには拡張モジュールunfiltered-uploadsを使用します。
unfiltered-uploadsを使用するにはbuild.sbtに以下の依存関係を追加します。

libraryDependencies ++= Seq(
  "net.databinder" %% "unfiltered-filter" % "0.5.3",
  "net.databinder" %% "unfiltered-uploads" % "0.5.3"
)

まずはファイルアップロードを行うための送信フォームを作成します。

// ファイルアップロード(送信フォーム)
case GET(Path("/upload")) => Ok ~> Html(
  <form method="POST" enctype="multipart/form-data">
    <input type="file" value="" name="file" />
    <input type="submit" />
  </form>
)

このフォームから送信されたリクエストを受け付け、サーバ上にファイルを保存する処理は以下のようになります。

// ファイルアップロード(送信結果)
case POST(Path("/upload") & MultiPart(req)) =>
  MultiPartParams.Streamed(req).files("file") match {
    case Seq(file, _*) if !file.name.isEmpty => {
      // 添付ファイルをファイルに保存
      val tmpfile = new java.io.File("hoge.txt")
      file.write(tmpfile)

      Html(<p>ファイル名: {file.name}, ファイルサイズ: {tmpfile.length()}</p>)
    }
    case f => Html(<p>error</p>)
  }