poi导出excel方式和疑难

最近由于公司要做什么信息安保,要对导出的文件进行加密操作,供应商提供的api对文件进行加密需要文件路径,现有的导出都直接输出流解决,没办法只能改变导出方法,在寻找好的导出过程试过许多方式,也遇到很蛋疼的问题。

首先导出excel的方式目前发现以下3种,1:最常用的输出流形势直接将文件返回给客户端。也就是OutputStream out = response.getOutputStream(); 这种方式特点是在服务器不会存在文件,导出很干净。

2:将文件生成在tomcat然后将文件路径给客户端下载 也就是说客户端导出服务端只是生成文件和返回文件地址 然后客户端windows.open(url)就可以下载。

3:还是流 不过绕了一圈,代码如下(这里只讲这种方式,其他的网上很多相关资料)
          

InputStream in = null;
			try {
				FileOutputStream fileOut = new FileOutputStream("D:/user.xls");//指定路径与名字和格式
				workbook.write(fileOut);
				fileOut.close();
				 in = new FileInputStream("D:/user.xls");
				 byte[] b = new byte[1024];
		            while((in.read(b))>0)
		            {
		                out.write(b);
		            }	} catch (Exception e) {
				e.printStackTrace();
			}finally{
				out.close();
				in.close();
			}
			
这块代码意思就是 先用poi生成excel在服务器磁盘中,然后读取该文件交给方法一中的输出流输出。但是这方法存在一个问题:在谷歌浏览器导出没问题,
在qq浏览器导出文件有问题,导出是导出了但是控制台报错ClientAbortException:  java.io.IOException  这个问题查了许久,网上查了许多方法有的说用户点击频繁,有的说是进行了多个相同的请求,有的说是tomcat timeout什么参数设置小了
但是在我环境都无法解决异常,没办发了只能这样忽略这个异常了,毕竟至少导出的excel是没问题了 惭愧这样的解决的方式 
				 if("ClientAbortException".equals(e.getClass().getSimpleName())){      
			            System.out.println("客户端刷新太快了");   
			       }else  {  
			       e.printStackTrace();   }
 

猜你喜欢

转载自blog.csdn.net/qq_34735535/article/details/79634683