spring controller を介してダウンロードする大きなファイルを提供するにはどうすればよいですか? 私は同様のトピックに関するいくつかの議論に従いました:
しかし、これらのソリューションは、300mb ~ 600mb の大きなファイルでは失敗します。最後の行で OutOfMemoryException を取得しています:
@RequestMapping(value = "/file/{dummyparam}.pdf", method = RequestMethod.GET, produces=MediaType.APPLICATION_OCTET_STREAM_VALUE)
public @ResponseBody byte[] getFile(@PathVariable("dummyparam") String dummyparam, HttpServletResponse response) {
.
.
InputStream is = new FileInputStream(resultFile);
response.setHeader("Content-Disposition", "attachment; filename=\"dummyname " + dummyparam + ".pdf\"");
.
.
return IOUtils.toByteArray(is);
私の(単純な)仮定は、IOUtils は大きなファイルでも処理できるというものでしたが、これは明らかに起こっていません。ダウンロードの進行中にファイルをチャンクに分割する方法はありますか? 通常、ファイルのサイズは約 300 ~ 600 MB です。同時ダウンロードの最大数は 10 と推定されます。
簡単な方法は、ファイルを webserver ディレクトリの静的コンテンツとしてリンクすることですが、Spring アプリ内でそれを試してみたいと思います。