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>) }