私は現在、FileUploaderJavascriptユーティリティを使用して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")))
}
}
私は小さなファイル(<10MB)のみを扱っており、casbahを使用して、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
かなり検索しましたが、良い例が見つからないようです。