CommonsFileupload的使用

全昊焜
2023-12-01
 

导入commons-fileupload-1.2.1.jar
   commons-io-1.4.jar

1.页面Form必需要加 ENCTYPE="multipart/form-data" method="post"

 
2.上传处理步骤

 // 实例化一个硬盘文件工厂,用来配置上传组件ServletFileUpload
 DiskFileItemFactory dfif = new DiskFileItemFactory();
 
 // 设置上传文件时用于临时存放文件的内存大小,这里是10K.多于的部分将临时存在硬盘
 dfif.setSizeThreshold(1024 * 10);
 
 // 设置存放临时文件的目录,web根目录下的FileUploadTemp目录
 dfif.setRepository(new File(this.getServletContext().getRealPath("") + "\\FileUploadTemp"));
 
 // 用以上工厂实例化上传组件
 ServletFileUpload sfu = new ServletFileUpload(dfif);
 
 //设置文件名编码
 sfu.setHeaderEncoding("UTF-8");

 // 设置最大上传尺寸
 sfu.setFileSizeMax(MAX_SIZE);
 
 // 从request得到 所有 上传域的列表
 List fileList = null;
 try {
   fileList = sfu.parseRequest(request);
 } catch (FileUploadException e) {// 处理文件尺寸过大异常
  if (e instanceof FileSizeLimitExceededException) {
   //文件尺寸超过规定大小
   return;
  }
  e.printStackTrace();
 }
 
 // 忽略简单form字段而不是上传域的文件域( 等)
 if (fileItem == null || fileItem.isFormField()) {
  continue;
 }
 
 // 得到文件的完整路径
 path = fileItem.getName();
 
 // 得到文件的大小
 size = fileItem.getSize();
 
 // 拒绝接受规定文件格式之外的文件类型
 if(allowedExt.indexOf(t_ext) < 0){//t_ext为文件后缀名,从文件完整路径中获得,allowedExt为自定义的可上传文件后缀名列表,个人距地更具后缀名俩判断类型不好
  //文件格式不正确
  return;
 }

 // 保存文件
 fileItem.write(new File(u_name));//u_name为文件名
  
  
   
3.中文情况,如果没有指定编码,问文件名会用系统的默认编码解析,可能会乱码,建议指定编码

 // 用以上工厂实例化上传组件
 ServletFileUpload sfu = new ServletFileUpload(dfif);
 //设置文件名编码
 sfu.setHeaderEncoding("UTF-8");

 

 类似资料: