如何将动态生成的CSV文件流式传输到浏览器以便在Spring MVC中下载

时间:2017-04-26 17:23:46

标签: java spring spring-mvc

我需要允许用户从浏览器(Java / Spring MVC 4.x应用程序)下载大型动态生成的CSV文件(~500K行)我不想先创建整个文件并拥有浏览器对服务器进行长时间轮询以确定它何时完成 - 相反,我想立即开始下载并让服务器在新行/字节可用时流响应。

我尝试使用ServletOutputStream / PrintWriter添加文本,然后刷新缓冲区。但是,在控制器方法返回之前,浏览器似乎不会开始下载。 (在调用flushBuffer()之后,您会看到该文件显示为下载,并在Chrome中显示“正在启动”消息。

有更好的方法吗?我看到StreamingResponseBody是在Spring 4.2中引入的,但是如果可能的话我宁愿不升级。有没有办法用Spring< 4.2?

来做到这一点

1 个答案:

答案 0 :(得分:0)

使用ServletOutputStream / PrintWriter添加文本,因为它变得可用然后刷新缓冲区实际上似乎工作... Chrome将显示“开始下载”一段时间然后慢速显示下载增加的大小按预期