BUG描述
实现javaWeb下载文件功能。将数据存储在session中,然后读取用jExcelAPI(jxl)开源组件生成一个excel表,然后用户下载这个excel。我实现下载是用a标签直接指向该文件,如下
<a href="文件的路径" target="_blank"></a>
但是出现了一个问题,每次session中存储的数据产生变化,重新生成excel表之后,下载的excel表使原先那一个。之后我在IDEA(集成开发环境的编译器)查看后,该excel表已被改变。但我是想下载存在session中最新的那部分数据。
解决方法
实现下载有两种方法,一种直接指向想要下载的文件路径。另一种使用servlet来实现,实现的部分代码如下。
File file = new File("该文件的路径");
response.setContentType(getServletContext().getMimeType(file.getName()));
InputStream is = new FileInputStream(file);
OutputStream os = response.getOutputStream();
int b;
while((b=is.read()) != -1) {
os.write(b);
}
is.close();
os.close();
我用了后一种方法之后,解决了这个问题。我猜测是第一种方法会读取编译器(IDEA)或者tomcat缓存了的这个文件,而无法读取到最新的文件。只有重启tomcat之后,才可以读取到。而第二种方法每次都是直接访问那个文件,不通过缓存。