Java 上传文件过程及清空相关缓存目录

一个类+几个方法,写过一次的东西,就要记录下来,以后可以方便的使用!

	//提交注册3 && 上传相关图片
public ActionForward reg_enterprise_3(ActionMapping mapping, ActionForm form,
		HttpServletRequest request, HttpServletResponse response)
		throws IOException, ServletException {
	UserInfo userinfo = (UserInfo)request.getSession().getAttribute("willRegUser");
	int uid = this.getUserInfoService().insert(userinfo);
	String mark = StringUtils.getParameter(request, "mark", "");
	if("jump_jiucool".equalsIgnoreCase(mark)){
		ActionForward gotourl = new ActionForward();
		gotourl.setPath("/reg_enterprise4.jsp);
		gotourl.setRedirect(true);
		return gotourl;
	}
	CookieUtils.setCookie(request, response, "umobile_jiucool", userinfo.getMsisdn(),60*60*24*30);
	CookieUtils.setCookie(request, response, "uemail_jiucool", userinfo.getEmail(),60*60*24*30);
	CookieUtils.setCookie(request, response, "uid_jiucool", String.valueOf(userinfo.getId()),60*60*24*30);
	request.getSession().setAttribute(Constants.USER_SESSION, new SessionUser(userinfo.getId()));
	String tempFilePath = Constants.PIC_UPLOAD_PATH + "enterprisePic/temp" + "/";
	try {
		File file = new File(tempFilePath);
		if(!file.exists()){
			file.mkdirs();
		}
		DiskFileItemFactory factory = new DiskFileItemFactory();
		factory.setSizeThreshold(4*1024);
		factory.setRepository(new File(tempFilePath));
		ServletFileUpload upload = new ServletFileUpload(factory);
		upload.setSizeMax(4*1024*1024);
		List items = upload.parseRequest(request);
		Iterator iter = items.iterator();
		Integer type=0;
		while(iter.hasNext()){
			FileItem item = (FileItem)iter.next();
			String filename = item.getFieldName();
			if(filename.equalsIgnoreCase("uploadface")){
				type=1;
			}else if(filename.equalsIgnoreCase("uploadidcard")){
				type=2;
			}			
			if(!item.isFormField()){
				this.processUploadedFile(item, userinfo, type);
			}
		}
		Boolean flag = true;
		 File dirFile = new File(tempFilePath);     	       
		  File[] files = dirFile.listFiles();     
		        for(int i=0;i<files.length;i++){     
		             //删除子文件     
		             if(files[i].isFile()){     
		                 flag = deleteFile(files[i].getAbsolutePath());     
		                 if(!flag){     
		                     break;     
		                 }     
		             }     
		             //删除子目录     
		             else{     
		                 flag = deleteDirectory(files[i].getAbsolutePath());     
		                 if(!flag){     
		                     break;     
		                 }     
		             }     
		         }     
	}catch(Exception e){
		throw new ServletException(e);
	}	
	ActionForward gotourl = new ActionForward();
	gotourl.setPath("/reg_enterprise4.jsp?uid=" + userinfo.getId());
	gotourl.setRedirect(true);
	return gotourl;
}
private void processUploadedFile(FileItem item,UserInfo userinfo,Integer type) throws Exception{
	String filename = item.getName();
	int index=filename.lastIndexOf("\\");
	filename = filename.substring(index+1, filename.length());
	long fileSize = item.getSize();
	if(filename.equals("") && fileSize ==0)return;
	String suffixName =  item.getName().substring(
			 item.getName().lastIndexOf("."));
	if(".png".equalsIgnoreCase(suffixName) || ".jpg".equalsIgnoreCase(suffixName)
			|| ".gif".equalsIgnoreCase(suffixName) || ".jpeg".equalsIgnoreCase(suffixName)){
		// 数据库存入路径					
		filename = System.currentTimeMillis() + suffixName;
 
		String adFileName ="";
		if(type==1){
			 adFileName = StringUtils.replaceChar(userinfo.getId()*11,"-") + "/" + DateUtils.format("yyyMMdd", new Date()) + "/";
			 FileUtils.saveFileStream(item.getInputStream(),Constants.FACE_UPLOAD_PATH , adFileName + filename);
				userinfo.setFace("/" + adFileName + filename);
				this.getUserInfoService().update(userinfo);
		}else if(type==2){
			 adFileName = "enterprisePic/" + "idcard" + "/" + DateUtils.format("yyyMMdd", new Date()) + "/";
			userinfo.setComidcard(adFileName + filename);				
		}else if(type==3){
			 adFileName = "enterprisePic/" + "comlicense" + "/" + DateUtils.format("yyyMMdd", new Date()) + "/";
				userinfo.setComlicense(adFileName + filename);
			}
			if(type>1){
				this.getUserInfoService().update(userinfo);
				FileUtils.saveFileStream(item.getInputStream(),Constants.PIC_UPLOAD_PATH,adFileName + filename);
			}
		}
	}
  /**   
   * 删除单个文件   
   * @param   fileName    被删除文件的文件名   
   * @return 单个文件删除成功返回true,否则返回false   
   */    
  public static boolean deleteFile(String fileName){     
      File file = new File(fileName);     
      if(file.isFile() && file.exists()){     
          file.delete();     
      return true;     
  }else{     
          return false;     
      }     
  }     
 
  /**   
   * 删除目录(文件夹)以及目录下的文件   
   * @param   dir 被删除目录的文件路径   
   * @return  目录删除成功返回true,否则返回false   
   */    
  public static boolean deleteDirectory(String dir){     
      //如果dir不以文件分隔符结尾,自动添加文件分隔符     
  if(!dir.endsWith(File.separator)){     
      dir = dir+File.separator;     
  }     
  File dirFile = new File(dir);     
  //如果dir对应的文件不存在,或者不是一个目录,则退出     
  if(!dirFile.exists() || !dirFile.isDirectory()){     
      System.out.println("删除目录失败"+dir+"目录不存在!");     
      return false;     
  }     
  boolean flag = true;     
  //删除文件夹下的所有文件(包括子目录)     
  File[] files = dirFile.listFiles();     
  for(int i=0;i<files.length;i++){     
      //删除子文件     
  if(files[i].isFile()){     
      flag = deleteFile(files[i].getAbsolutePath());     
      if(!flag){     
          break;     
      }     
  }     
  //删除子目录     
      else{     
          flag = deleteDirectory(files[i].getAbsolutePath());     
          if(!flag){     
              break;     
          }     
      }     
  }     
 
  if(!flag){     
      System.out.println("删除目录失败");     
      return false;     
  }     
 
  //删除当前目录     
  if(dirFile.delete()){     
      System.out.println("删除目录"+dir+"成功!");     
      return true;     
  }else{     
      System.out.println("删除目录"+dir+"失败!");     
          return false;     
      }     
  }

3 Responses to “Java 上传文件过程及清空相关缓存目录”

  1. zwwooooo CHINA Mozilla Firefox Windows says:

    跟着沙发晕

    [Reply]

    久酷 CHINA Mozilla Firefox Windows Reply:

    @zwwooooo, 可以跳过, :lol: :lol: HOHO

    [Reply]

  2. A.shun CHINA Opera Windows says:

    好多代码。。。晕了 8-O

    [Reply]

Leave a Reply

:wink: :-| :-x :twisted: :) 8-O :( :roll: :-P :oops: :-o :mrgreen: :lol: :idea: :-D :evil: :cry: 8) :arrow: :-? :?: :!:


正在读取数据……