Playでファイルアップローダー機能を実装する


playフレームワークを使ってアップローダーを作成する。
前提としてplayの空プロジェクトができているものとする。

ルーティングの設定

routesに次の3行を追加する。

# for Uploader
GET     /up             controllers.Uploader.index
POST    /upload         controllers.Uploader.upload

ビューの作成

アップローダーを行う画面を作成する。

app/view/up.scala.html
@(message: String)

@main("Welcome to Play") {

@helper.form(action = routes.Uploader.upload, 'enctype -> "multipart/form-data"){
        <input type="file" name="file">
        <input type="submit">
}

}

コントローラーの作成

アップロード用のロジックを作成する。

app/controllers/Uploader.scala
package controllers

import play.api._
import play.api.mvc._

object Uploader extends Controller {

  def index = Action {
    Ok(views.html.up("アップロード成功"))
  }

  def upload = Action(parse.multipartFormData) { request =>
    request.body.file("file").map { file =>
      import java.io.File
      val filename = file.filename
      val contentType = file.contentType
      file.ref.moveTo(new File("/tmp", filename))
    Ok(views.html.up("アップロード成功"))
    }.getOrElse {
      Redirect(routes.Uploader.index).flashing(
        "error" -> "Missing file"
      )
    }
  }

}

これで次のURLにアクセスすればアップロードを行える。
http://ホスト名:9000/up