通过RestTemplate下载流文件

时间:2016-06-21 08:59:12

标签: java spring spring-boot outputstream 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);
}

我已将RestTemplate设置为不缓冲,并且我已通过检查所使用的请求类型(SimpleStreamingClientHttpRequest)验证了这是否有效。 所有数据都是正确的,它只是一次性地写入流中,而不是像

中那样写入

2 个答案:

答案 0 :(得分:0)

RestTemplate不适用于流式传输响应正文,如pointed out in this JIRA issue

答案 1 :(得分:0)

您可以使用restTemplate.execute。参见https://www.baeldung.com/spring-resttemplate-download-large-file