解决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>
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值