java – 通过RestTemplate下载流文件
作者:互联网
我有一个大型文件下载,由一台服务器上的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设置为不缓冲,我已通过检查所使用的Request类型(SimpleStreamingClientHttpRequest)验证了这是否有效.
所有数据都是正确的,它只是一次只写入流,而不是它的内容
解决方法:
RestTemplate不是用于流式传输响应主体,如pointed out in this JIRA issue.
标签:java,spring,spring-boot-2,outputstream,spring-cloud-netflix 来源: https://codeday.me/bug/20190711/1430605.html