私は、ユーザーがファイルをアップロードできるようにするPlay2.0Javaアプリケーションを作成しています。これらのファイルは、Javaライブラリを使用してアクセスするサードパーティのサービスに保存されます。このAPIで使用するメソッドには、次の署名があります。
void store(InputStream stream, String path, String contentType)
次の簡単なコントローラーを使用して、アップロードを機能させることができました。
public static Result uploadFile(String path) {
MultipartFormData body = request().body().asMultipartFormData();
FilePart filePart = body.getFile("files[]");
InputStream is = new FileInputStream(filePart.getFile())
myApi.store(is,path,filePart.getContentType());
return ok();
}
私の懸念は、このソリューションは効率的ではないことです。デフォルトでは、Playフレームワークは、クライアントによってアップロードされたすべてのデータをサーバー上の一時ファイルに保存し、コントローラーのuploadFile()メソッドを呼び出します。
従来のサーブレットアプリケーションでは、次のように動作するサーブレットを作成していました。
myApi.store(request.getInputStream(), ...)
私はどこでも検索してきましたが、解決策は見つかりませんでした。私が見つけた最も近い例は、なぜ呼び出しエラーが発生したり、BodyParserのIterateeで要求がPlay Framework2.0でハングしたりするのですか?しかし、自分のニーズに合うように変更する方法が見つかりませんでした。
play2にこの動作を実現する方法はありますか?つまり、クライアントによってアップロードされたデータを使用して、Webアプリケーションを直接別のシステムに「通過」させる方法はありますか?
ありがとう。