Attualmente sto usando il seguente con Play2/Scala utilizzando l'utilità FileUploader Javascript per caricare un file al mio server:Tirando file da MultipartFormData nella memoria in Play2/Scala
def fileUploader = Action(parse.multipartFormData) { request =>
request.body.file("qqfile").map { picture =>
import java.io.File
val filename = picture.filename
val contentType = picture.contentType
picture.ref.moveTo(new File("/tmp",filename))
Ok(Json.toJson(Map("success" -> "true")))
}.getOrElse {
Ok(Json.toJson(Map("error" -> "error occured")))
}
}
Sono solo trattare con piccoli file (< 10 MB) e voglio usare la casbah per scrivere quei file direttamente in un documento Mongo o GridFS usando i driver Mongo. Mi rendo conto che potrei semplicemente leggere il file salvato dal disco, ma esiste un modo per gestirlo tutto dalla memoria senza prima eseguire il buffering del file sul disco?
La documentazione di gioco qui consiglia di scrivere un BodyParser personalizzato (http://www.playframework.com/documentation/2.1.0/ScalaFileUpload) ma non sembra esserci alcuna documentazione su come procedere per scriverne uno. Non era chiaro come l'API/implementazione funzionasse dagli Scaladoc. Ho provato a cercare il codice sorgente MultiPartFormData per vedere come funzionava, ma non riesco a trovare nel loro Git repo:
https://github.com/playframework/Play20/tree/master/framework/src/play/src/main/scala/play/api/mvc
Ho cercato un po ', ma non riesco per trovare un buon esempio.
Il parser corpo 'multipartFormData' può essere trovato qui: https://github.com/playframework/Play20/blob/2.1.0/framework/ src/play/src/main/Scala/play/api/MVC/ContentTypes.scala # L541 – EECOLOR