I have a model
case class Person(
_id: ObjectId = new ObjectId,
empno: String,
name: String,
picture: String
)
I'm a bit lost on how do I handle the picture upload on the form, controller and view.
Appreciate help for sample or point me to the correct direction.
This answer uses GridFS, however you may do what you want with file in upload method.
Form view:
@helper.form(routes.Application.upload, 'enctype -> "multipart/form-data") {
@helper.inputFile(form("photo"))
<button type="submit">upload</button>
}
Display view:
<img src='@routes.Application.getPhoto(fileId)'/>
Controller:
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
}
}
Routes:
GET /upload controllers.Application.upload
GET /photos/:file controllers.Application.getPhoto(file: ObjectId)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With