【问题标题】:Any sample to store and retrieve image on mongodb using gridfs, scala and playframework2使用 gridfs、scala 和 playframework2 在 mongodb 上存储和检索图像的任何示例
【发布时间】:2012-10-30 09:03:18
【问题描述】:
我有模特
case class Person(
_id: ObjectId = new ObjectId,
empno: String,
name: String,
picture: String
)
我对如何处理form、controller 和view 上的图片上传有点迷茫。
感谢您对样品的帮助或指出正确的方向。
【问题讨论】:
标签:
mongodb
playframework
playframework-2.0
salat
【解决方案1】:
此答案使用 GridFS,但是您可以使用 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)