读书人

解决Struts2下传文件后文件大小变大

发布时间: 2012-09-28 00:03:35 作者: rapoo

解决Struts2上传文件后文件大小变大

今天练习Struts2是时,发现了一个有趣的现象:Struts2上传后的文件,跟原文件有出入,变大了。

?

无论是图片文件还是文本文件都是这样。我特地对文本文件进行了对比,发现上传后的文件有重复的字符。并且俺对前后两个文件的属性进行了查看对比。发现原文件和上传后文件的属性很有意思,如下:

????????????????? 原文件
解决Struts2下传文件后文件大小变大

????????????????? 上传后文件
解决Struts2下传文件后文件大小变大

那这个到底是框架上传文件时自身问题,还是我们在保存文件时有问题呢,我特地打印了框架上传后的临时文件大小,发现跟原文件一样仍是:3175.

?

那问题就出在保存文件这一关了,我的代码是这样的。

InputStream fis = new FileInputStream(file);OutputStream fos = new FileOutputStream(filePath);byte[] bs = new byte[2*1024];int i ;while ((i = fis.read(bs)) > 0) {fos.write(bs);}fis.close();fos.flush();fos.close();
?

问题会在哪里呢,后来发现问题在

fos.write(bs);

?将其改成:

fos.write(bs, 0, i);

?上传前后文件就一致了。

?

问题应该是缓存数组处理的问题了,看来流的那些方法不是无用的,不能偷懒。

?

注:最好配置上Struts2的cleanup过滤器

  <!-- Struts Cleanup Filter -->  <filter>  <filter-name>struts2-cleanup</filter-name>  <filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>  </filter>  <filter-mapping>  <filter-name>struts2-cleanup</filter-name>  <url-pattern>/*</url-pattern>  </filter-mapping>
?

?

读书人网 >软件架构设计

热点推荐