我目前正在使用Play2/Scala,使用FileUploader Javascript实用程序将文件上传到我的服务器:
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")))
}
}
我只处理小文件(<10MB),并且希望使用Mongo驱动程序将这些文件直接写入Mongo文档或GridFS。我意识到我可以从磁盘上读取保存的文件,但是否有一种方法可以在不首先缓冲磁盘上的文件的情况下从内存中处理所有内容?Play文档在此处建议编写自定义BodyParser (http://www.playframework.com/documentation/2.1.0/ScalaFileUpload),但似乎没有关于如何编写的任何文档。从Scaladocs中无法了解API /实现的工作方式。我尝试查找MultiPartFormData源代码以查看其工作原理,但似乎在其Git存储库中找不到它:
https://github.com/playframework/Play20/tree/master/framework/src/play/src/main/scala/play/api/mvc
我已经搜索了很多,但似乎找不到一个好的例子。
multipartFormData
的body解析器可以在这里找到:https://github.com/playframework/Play20/blob/2.1.0/framework/src/play/src/main/scala/play/api/mvc/ContentTypes.scala#L541 - EECOLOR