参考资料:http://blog.csdn.net/tsytdhs163/article/details/7889641
情况:
公司后台查询数据,用户反应下载超过1各月的数据时,页面就会崩溃,报错为nginx 504超时
解决办法:
按照以上链接的思路,主要是在写入excel的时候,每一小段时间久向nginx返回信息,与客户端建立长连接。
然而考虑到我们后台的架构,必须将生成excel的生成过程改写到controller中。
另外文中的response.getWriter().write功能和spring boot的框架冲突,运行过程中会报出:
getWriter() already been used 的错误,经过google,使用getOutputStream()代替即可,通时write的内容改为getBytes():
response.getOutputStream().write(new StringBuffer().append(fileName).toString().getBytes());
response.flushBuffer();
此处write的内容应该生成文件的url,保持长连接的代码也一样:
response.getOutputStream().write(" ".getBytes());
response.flushBuffer();
页面通过ajax和layer.load()创建等待的遮罩,在ajax成功返回后再次submit表单:
注意此处由于url的文件后缀的“.”直接带url参数会导致无法被服务端识别完整的url,因此需要将前后缀分开提交。
最后根据url用IOStream下载文件即可。