2016-09-28 10 views
1

私はSpring Boot 1.2.5で作業しています。生のバイナリファイルをコントローラにアップロードしたいと思います。ファイルサイズが大きいので、要求全体をメモリに保持したくないのですが、ファイルをストリームします。実際には、ファイルが送信開始として生成されているため、クライアントはファイルのサイズを知りません。私は、マルチパートでエンコードされたファイルアップロードのような何かをする方法の例を参照してくださいhere。しかし、私はマルチパートでエンコードされたアップロードを望んでいません。バイトの生のストリームだけです。私は春にこのユースケースを処理する方法を見つけることができないようです。ストリームとしてマルチパート以外のファイルをアップロードする

答えて

1

HttpServletRequest入力ストリームを消費することができます。
リクエストを前処理して入力ストリームを消費するフィルタがある場合、これは機能しない可能性があることに注意してください。

@ResponseBody 
@RequestMapping(path="fileupload", method = RequestMethod.POST, consumes = MediaType.APPLICATION_OCTET_STREAM_VALUE) 
public void fileUpload(HttpServletRequest request) throws IOException { 
    Files.copy(request.getInputStream(), Paths.get("myfilename")); 
} 
+0

このハンドラは、アップロードがまだ進行中のときに呼び出されます。意味は、データが一時ファイルに格納されておらず、呼び出し時にファイル全体がメモリに格納されていないことを意味します。 – cmaynard

+0

@ cmaynard要求ヘッダーが処理されると、このメソッドに入ります。次に、リクエスト本体のストリームを取得します。 'TeeInputStream'のようなものを使ってリクエスト本体のバッファを保持するサーブレットフィルタがあるかもしれませんが、デフォルトのspring-boot、spring-mvcプロジェクトではそういったことはないはずです。 – Magnus

関連する問題