2012-10-30 19 views

回答

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) 
相關問題