Java项目生成Excel并通过浏览器下载

时间:2024-04-09 15:22:13

记一次拙劣的下载优化,因水平有限,各位朋友如果有更好的建议,欢迎留言。

背景:之前版本的下载是在代码里生成Workbook文件,然后将该workbook对象写入浏览器的输出流,以此完成下载。

问题:小的文本文件无所谓,但是如果是包含了大量图片的大文件,这种操作会在workbook下入浏览器输出流的时候出现一个瓶颈,不仅本线程会很慢,更会因为占用太多的资源拖累整个应用程序。

(1) 之前的下载代码如下

Java项目生成Excel并通过浏览器下载

上述代码就是直接将生成的workbook写入HttpServletResponse对象的输出流。

(2) 优化方案是:先将生成的workbook存放到服务器一个路径下,然后将该文件对应的网络路径返回给浏览器,由浏览器进行下载,这样的话在workbook写入输出流这一步就可以省下一些资源。代码如下

Java项目生成Excel并通过浏览器下载

改版后的下载没有用多线程,而是单线程下载(公司自己的服务器,性能实在太差,需要省着用)。改完后,生成的workbook是先存放在服务器指定目录下,然后将服务器的网络路径加上文件的相对路径,返回给浏览器。