最近做SSH2框架整合做文件上传下载功能时选择使用了Struts2框架的上传组件,结果出现了文件上传成功,可源文件是有2K可上传后的文件却变成了2G的情况,让人纠结了好久,最终终于发现了问题所在,是一个地方自己理解的不够清楚才出现了这样的情况。

private static boolean copy(File updFilePath, File saveFilePath) {
   boolean  result=false;
  InputStream in=null;
  OutputStream out=null;
  try {
   in=new BufferedInputStream(new FileInputStream(updFilePath),BUFFER_SIZE);
   out=new BufferedOutputStream(new FileOutputStream(saveFilePath),BUFFER_SIZE);
   byte[] buffer=new byte[BUFFER_SIZE];
   int len=0;
   //len=in.read(buffer);           //注意len的赋值要放在while中,因为len的值是动态赋予的
   while(0<(len=in.read(buffer) )){//注意本行和上一行的区别,如果len在上一行赋值则在
while中
    out.write(buffer,0,len);
   }
   result=true;
  } catch (Exception e) {
   result=false;
   e.printStackTrace();
  }finally{
   try {
    if(out!=null){out.close();}
    if(in!=null){in.close();}
   } catch (IOException e) {e.printStackTrace();}
  }
  return result;
 }

代码如上,之前我对当前读取文件长度的定义放在了while循环的外边,结果就出现了while死循环一直向上传后的文件中写入len长度的内容问题,结果就 悲催了,上传后的文件变得异常大。