2012-10-30 2 views
3

gridfs, 스칼라 및 playframework2를 사용하여 MongoDB에서 이미지를 검색하는 모든 샘플저장하고 나는 모델이

case class Person(
    _id: ObjectId = new ObjectId, 
    empno: String, 
    name: String, 
    picture: String 
) 

나는 조금 내가 form, controllerview에 사진 업로드를 처리 할 방법에 잃었어요 . 샘플에 대한 도움을 감사하거나 올바른 방향으로 안내합니다.

답변

2

이 답변은 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)