通过RestTemplate下载流文件

ali*_*992 6 java spring outputstream spring-boot spring-cloud-netflix

我有一个大文件下载,该文件由一台服务器上的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);
}
Run Code Online (Sandbox Code Playgroud)

我已经将RestTemplate设置为不缓冲,并且通过检查所使用的请求类型(SimpleStreamingClientHttpRequest)验证了此模板是否正常工作。数据全部恢复正确,它只是一次全部写入流中,而不是直接写入

Bri*_*zel 1

RestTemplate正如本 JIRA 问题中指出的那样,并不用于流式传输响应正文。