この回答ではGridFSを使用していますが、fileinメソッドを使用して必要な処理を実行できますupload
。
フォームビュー:
@helper.form(routes.Application.upload, 'enctype -> "multipart/form-data") {
@helper.inputFile(form("photo"))
<button type="submit">upload</button>
}
表示ビュー:
<img src='@routes.Application.getPhoto(fileId)'/>
コントローラ:
def upload = Action(parse.multipartFormData) { request =>
request.body.file("photo") match {
case Some(photo) =>
val gridFs = salat.gridFS("photos")
val uploadedFile = gridFs.createFile(photo.ref.file)
uploadedFile.contentType = photo.contentType.orNull
uploadedFile.save()
Ok(...)
case None => BadRequest("no photo")
}
}
def getPhoto(file: ObjectId) = Action {
import com.mongodb.casbah.Implicits._
val gridFs = salat.gridFS("photos")
gridFs.findOne(Map("_id" -> file)) match {
case Some(f) => SimpleResult(
ResponseHeader(OK, Map(
CONTENT_LENGTH -> f.length.toString,
CONTENT_TYPE -> f.contentType.getOrElse(BINARY),
DATE -> new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss 'GMT'", java.util.Locale.US).format(f.uploadDate)
)),
Enumerator.fromStream(f.inputStream)
)
case None => NotFound
}
}
ルート:
GET /upload controllers.Application.upload
GET /photos/:file controllers.Application.getPhoto(file: ObjectId)