日期:2014-05-18  浏览次数:20938 次

利用FileUpload上传文件时,不管文件多大,都会溢出?
利用apache的FileUpload组件上传文件的时候,刚开始的时候,还没有问题,一些小附件能上传,可是当测试了一个大附件之后,就报了内存溢出,再上传小附件,也上传不了,还是报内存溢出?为何?
        以下是我处理的代码:

        DiskFileUpload   fileUpload   =   new   DiskFileUpload();
        //设置允许用户上传文件大小,单位:字节
        fileUpload.setSizeMax(500*1024*1024);
        //设置最多允许在内存中存储的数据,单位:字节
        fileUpload.setSizeThreshold(100*1024*1024);
        //设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录
        //在进行文件上传的时候文件先存再内存中,然后才会存到server上,
        //   但是如果内存放不下那么大的文件
        //就必须用硬盘上的   一个临时文件夹来保存这个文件的部分,然后转存
        //现在默认的文件存储的路径是
        String   tempPath   =   System.getProperty( "user.dir ");
        tempPath   =   tempPath.replace( '\\ ', '/ ');
        String   temp   =   tempPath.substring(0,   tempPath.length-3)   + "webapps/BJRoadMIS/temp ";
        fileUpload.setRepositoryPath(temp);
  //获取传入的表单中的参数值
        try   {
fileItems   =   fileUpload.parseRequest(request);
Iterator   iterator   =   fileItems.iterator();
while(iterator.hasNext()){
FileItem   fileItem   =   (FileItem)iterator.next();
if   (fileItem.isFormField()){
value   =   value+segment+fileItem.getString();
}
};
try   {
        value   =   new   String(value.getBytes( "ISO-8859-1 "), "gbk ");
}   catch   (UnsupportedEncodingException   e1)   {
        e1.printStackTrace();
}

String[]   s   =   value.split(segment);

                  if(s.length> 1){
uploadPath   =   tempPath+ "/webapps/BJRoadMIS/upload/ ";

try   {
iterator   =   fileItems.iterator();
while(iterator.hasNext())   {
FileItem   fileItem   =   (FileItem)iterator.next();
//文件域的表单信息
if   (!fileItem.isFormField())   {
String   strName   =   fileItem.getName();
uploadFileName   =   strName.substring(strName.lastIndexOf( "\\ ")+1,   strName.length());
long   size   =   fileItem.getSize();
if((strName==null||strName.equals( " "))   &&   size==0)
continue;

pp=uploadFileName.substring(uploadFileName.lastIndexOf( ". "),uploadFileName.length());

File   savedFile   =   new   File(uploadPath   +datelog+pp   );
fileItem.write(savedFile);
request.setAttribute( "msg ", "save   file   successful! ");
}
}

if(request.getAttribute( "msg ")==   null){
request.setAttribute( "msg ", "save   file   failed! ");
}
}   catc