6

我有一个由一台服务器上的 RestController 提供的大文件下载,我需要通过另一台服务器上的 RestController 进行流式传输。当直接调用终端服务器时,结果流很好。但是,当使用 RestTemplate 调用此服务器然后将响应写入 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) 来验证这是否有效。数据全部恢复正确,它只是一次全部写入流,而不是当它进来时

4

2 回答 2

1

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

于 2020-02-26T13:13:09.383 回答
0

RestTemplate正如此 JIRA 问题中所指出的那样,并不意味着流式传输响应正文。

于 2017-02-14T21:34:00.430 回答