我有一个大型文件下载,由一台服务器上的RestController提供,我需要通过另一台服务器上的RestController进行流式传输。直接调用终端服务器时,结果流很好。但是,当使用RestTemplate调用此服务器然后将响应写入OutputStream时,响应将在前端服务器上缓冲,直到整个文件准备就绪,然后进行流式传输。有没有办法可以将文件写入OutputStream?
目前,前端服务器上的代码与此
类似@ResponseBody
public void downloadResults(HttpServletRequest request, HttpServletResponse response, @RequestParam("id") String jobId, OutputStream stream)
throws IOException
{
byte[] data = restTemplate.exchange("http://localhost/getFile", HttpMethod.POST, requestEntity, byte[].class, parameters).getBody();
stream.write(data);
}
我已将RestTemplate设置为不缓冲,并且我已通过检查所使用的请求类型(SimpleStreamingClientHttpRequest)验证了这是否有效。 所有数据都是正确的,它只是一次性地写入流中,而不是像
中那样写入答案 0 :(得分:0)
RestTemplate
不适用于流式传输响应正文,如pointed out in this JIRA issue。
答案 1 :(得分:0)
您可以使用restTemplate.execute。参见https://www.baeldung.com/spring-resttemplate-download-large-file