在Java中,关于文件上传,有好多种处理方法,在此,只是介绍Apache的FileUpload组件的基本用法。
在原来的Commons-FileUpload版本中,即1.2版本之前,是如下处理上传的:
DiskFileUpload fileUpload
=
new
DiskFileUpload();
// 设置允许用户上传文件大小,单位:字节
fileUpload.setSizeMax( 500 * 1024 * 1024 );
// 设置最多允许在内存中存储的数据,单位:字节
fileUpload.setSizeThreshold( 10 * 1024 * 1024 );
// 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录
// 在进行文件上传的时候文件先存再内存中,然后才会存到server上,但是如果内存放不下那么大的文件
// 就必须用硬盘上的 一个临时文件夹来保存这个文件的部分,然后转存
// 现在默认的文件存储的路径是
String tempPath = " e://...... " ;
// 设置上传文件的名字
String fileName = "" ;
String uploadFilename = "" ;
String pp = "" :
try ... {
List fileItems = fileUpload.parseRequest(request);
Iterator iterator = fileItems.iterator();
while(iterator.hasNext())...{
FileItem fileItem = (FileItem)iterator.next();
if (fileItem.isFormField())...{
if(fileItem.getFileldName().equals("xxxx"))...{
fileName = fileItem.getString();
try ...{
fileName= new String(fileName.getBytes("ISO-8859-1"),"gb2312");
} catch (UnsupportedEncodingException e) ...{
e.printStackTrace();
}
}
}else...{
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);
}
}
} catch () ... {
}
// 设置允许用户上传文件大小,单位:字节
fileUpload.setSizeMax( 500 * 1024 * 1024 );
// 设置最多允许在内存中存储的数据,单位:字节
fileUpload.setSizeThreshold( 10 * 1024 * 1024 );
// 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录
// 在进行文件上传的时候文件先存再内存中,然后才会存到server上,但是如果内存放不下那么大的文件
// 就必须用硬盘上的 一个临时文件夹来保存这个文件的部分,然后转存
// 现在默认的文件存储的路径是
String tempPath = " e://...... " ;
// 设置上传文件的名字
String fileName = "" ;
String uploadFilename = "" ;
String pp = "" :
try ... {
List fileItems = fileUpload.parseRequest(request);
Iterator iterator = fileItems.iterator();
while(iterator.hasNext())...{
FileItem fileItem = (FileItem)iterator.next();
if (fileItem.isFormField())...{
if(fileItem.getFileldName().equals("xxxx"))...{
fileName = fileItem.getString();
try ...{
fileName= new String(fileName.getBytes("ISO-8859-1"),"gb2312");
} catch (UnsupportedEncodingException e) ...{
e.printStackTrace();
}
}
}else...{
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);
}
}
} catch () ... {
}
以上是1.2版本之前的用法,到了1.2版本之后,已经不再使用DiskFileUpload这种方法了,而改用 DiskFileItemFactory这种访问方法,具体的改进如下:
DiskFileItemFactory factory
=
new
DiskFileItemFactory();
// 设置内存最大值,50M
factory.setSizeThreshold( 50 * 1000 * 1000 );
// 设置临时空间,当上传内容大于最大内存值时
factory.setRepository( new File(temp));
ServletFileUpload upload = new ServletFileUpload(factory);
// 设置上传最大限制500M
upload.setSizeMax( 500 * 1000 * 1000 );
// 设置内存最大值,50M
factory.setSizeThreshold( 50 * 1000 * 1000 );
// 设置临时空间,当上传内容大于最大内存值时
factory.setRepository( new File(temp));
ServletFileUpload upload = new ServletFileUpload(factory);
// 设置上传最大限制500M
upload.setSizeMax( 500 * 1000 * 1000 );
除此之外,其他的地方几乎没有什么大的改变,故在此不贴出来。