开发fileupload组件的专属操作类

来源:互联网 发布:world of goo mac 编辑:程序博客网 时间:2024/06/05 00:34

开发fileupload组件的专属操作类

分类: Java
基础类:

[java] view plaincopyprint?
  1. package cn.mldn.lxh.util;  
  2. import java.text.SimpleDateFormat;  
  3. import java.util.Date;  
  4. import java.util.Random;  
  5. public class IPTimeStamp {  
  6.     private SimpleDateFormat sdf = null;  
  7.     private String ip = null;  
  8.     public IPTimeStamp(){  
  9.                       
  10.     }  
  11.     public IPTimeStamp(String ip){  
  12.         this.ip = ip;          
  13.     }  
  14.     public String getIPTimeRand(){  
  15.         StringBuffer buf = new StringBuffer();  
  16.         if(this.ip!=null){  
  17.             String s[] = this.ip.split("\\.");  
  18.             for(int i=0;i<s.length;i++){  
  19.                 buf.append(this.addZero(s[i],3));        //不够三位数字的要补0                  
  20.             }  
  21.         }  
  22.         buf.append(this.getTimeStamp());            //取得时间戳  
  23.         Random r = new Random();  
  24.         for(int i=0;i<3;i++){  
  25.             buf.append(r.nextInt(10));                //增加一个随机数          
  26.         }  
  27.         return buf.toString();  
  28.     }  
  29.     private String addZero(String str,int len){  
  30.         StringBuffer s = new StringBuffer();  
  31.         s.append(str);  
  32.         while(s.length()<len){  
  33.             s.insert(0,"0");              
  34.         }  
  35.         return s.toString();  
  36.     }  
  37.     public String getDate(){  
  38.         this.sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");  
  39.         return this.sdf.format(new Date());  
  40.     }  
  41.     public String getTimeStamp(){  
  42.         this.sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");  
  43.         return this.sdf.format(new Date());  
  44.     }  
  45. }  




操作类:
[java] view plaincopyprint?
  1. package cn.mldn.lxh.util;  
  2.   
  3. import java.util.*;  
  4. import java.io.*;  
  5.   
  6. import javax.servlet.http.*;  
  7. import org.apache.commons.fileupload.*;  
  8. import org.apache.commons.fileupload.disk.*;  
  9. import org.apache.commons.fileupload.servlet.*;  
  10. import cn.mldn.lxh.util.IPTimeStamp;  
  11.   
  12. public class FileUploadTools{  
  13.  private HttpServletRequest request=null;  
  14.  private List<FileItem> items=null;  
  15.  private Map<String,List<String>> params=new HashMap<String,List<String>>();  
  16.  private Map<String,FileItem> files=new HashMap<String,FileItem>();  
  17.   
  18.  public FileUploadTools(HttpServletRequest request,int maxSize,String tempDir) throws Exception{  
  19.   this.request=request;  
  20.   DiskFileItemFactory factory=new DiskFileItemFactory();  
  21.   if(tempDir!=null){  
  22.    factory.setRepository(new File(tempDir));  
  23.   }  
  24.   ServletFileUpload upload= new ServletFileUpload(factory);  
  25.   if(maxSize>0){  
  26.    upload.setFileSizeMax(maxSize);  
  27.   }  
  28.   this.items=upload.parseRequest(request);  
  29.   init();  
  30.  }  
  31.   
  32.  private void init(){  
  33.   Iterator<FileItem> iter=this.items.iterator();  
  34.   IPTimeStamp its=new IPTimeStamp(this.request.getRemoteAddr());  
  35.   
  36.   while(iter.hasNext()){  
  37.    FileItem item=iter.next();  
  38.    if(item.isFormField()){  //是普通数据  
  39.     String name=item.getFieldName();  
  40.     String value=null;  
  41.     try {  
  42.         value=item.getString("utf-8");  
  43.     } catch (UnsupportedEncodingException e) {  
  44.         // TODO Auto-generated catch block  
  45.         e.printStackTrace();  
  46.     }  
  47.     List<String> temp=null;  
  48.     if(this.params.containsKey(name)){  
  49.      temp=this.params.get(name);  
  50.     }else{  
  51.      temp=new ArrayList<String>();  
  52.     }  
  53.     temp.add(value);  
  54.     this.params.put(name,temp);  
  55.    }else{   // 按照文件  
  56.     String fileName = its.getIPTimeRand()+"."+item.getName().split("\\.")[1];  
  57.     this.files.put(fileName,item);  
  58.    }  
  59.   }  
  60.  }  
  61.   
  62.  public String getParameter(String name){  
  63.   List<String> list =this.params.get(name);  
  64.   if(list!=null){  
  65.    return list.toArray(new String[]{})[0];  
  66.   }  
  67.   return null;  
  68.  }  
  69.   
  70.  public String[] getParameterValues(String name){  
  71.   List<String> list=this.params.get(name);  
  72.   if(list!=null){  
  73.    return list.toArray(new String[]{});  
  74.   }  
  75.   return null;  
  76.  }  
  77.   
  78.  public Map<String,FileItem> getUploadFiles(){  
  79.   return this.files;  
  80.  }  
  81.   
  82.  public List<String> saveAll(String saveDir) throws Exception{  
  83.   FileItem item =null;  
  84.   List<String> names=new ArrayList<String>();  
  85.   if(this.files.size()>0){     //  有内容  
  86.    Set<String> set = this.files.keySet();  
  87.    Iterator<String> iter= set.iterator();  
  88.   
  89.    // 循环将要上传的文件 依次保存到指定的文件夹中  
  90.    while(iter.hasNext()){  
  91.     item =  this.files.get(iter.next());  
  92.     String fileName= new IPTimeStamp(request.getRemoteAddr()).getIPTimeRand()  
  93.      +"."+iter.next().split("\\.")[1];  
  94.     names.add(fileName);  
  95.     InputStream input =null;  
  96.     OutputStream output=null;  
  97.     new FileOutputStream(fileName);  
  98.     try{  
  99.      input=item.getInputStream();  
  100.      output = new FileOutputStream(saveDir+fileName);  
  101.      int len=0;  
  102.      byte[] b=new byte[1024];  
  103.      while((len=input.read(b))!=-1){  
  104.       output.write(b,0,len);  
  105.      }  
  106.     }catch(Exception e){  
  107.      throw e;  
  108.     }finally{  
  109.      try{  
  110.       output.close();  
  111.       input.close();  
  112.      }catch(Exception e1){  
  113.       throw e1;    }  
  114.     }  
  115.    }  
  116.   }  
  117.   return names;   // 返回保存后的每个文件名称  
  118.  }  
  119. }  



操作展示:

[java] view plaincopyprint?
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  2. <html>  
  3. <head>  
  4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  5. <title>Insert title here</title>  
  6. </head>  
  7. <body>  
  8. <form action="fileupload_demo03.jsp" method="post" enctype="multipart/form-data">  
  9. 姓名:<input type="text" name="uname"><br/>  
  10. 兴趣:<input type="checkbox" name="inst" value="swimming">游泳  
  11. <input type="checkbox" name="inst" value="Song">唱歌  
  12. <input type="checkbox" name="inst" value="Run">跑步<br/>  
  13. 请选择文件:<input type="file" name="pic1"><br/>  
  14. 请选择文件:<input type="file" name="pic2"><br/>  
  15. 请选择文件:<input type="file" name="pic3"><br/>  
  16. 请选择文件:<input type="file" name="pic4"><br/>  
  17. <input type="submit" value="上传">  
  18. </form>  
  19. </body>  
  20. </html>  



[java] view plaincopyprint?
  1. <%@ page language="java" contentType="text/html; charset=utf8"  
  2.     pageEncoding="utf8"%>  
  3. <%@ page import="java.util.*"%>  
  4. <%@ page import="cn.mldn.lxh.util.*"%>  
  5. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  6. <html>  
  7. <head>  
  8. <meta http-equiv="Content-Type" content="text/html; charset=utf8">  
  9. <title>Insert title here</title>  
  10. </head>  
  11. <body>  
  12. <%  
  13.     FileUploadTools fut = new FileUploadTools(request,3*1024*1024,this.getServletContext().getRealPath("/")+"uploadtemp");  
  14.     String name = fut.getParameter("uname");  
  15.     String inst[] = fut.getParameterValues("inst");  
  16.     List<String> all = fut.saveAll(this.getServletContext().getRealPath("/")+"upload"+java.io.File.separator);  
  17. %>  
  18. <h3>姓名:<%=name%></h3>  
  19. <h3>兴趣:  
  20. <%      
  21. for(int x=0;x<inst.length;x++){  
  22. %>  
  23.     <%=inst[x]%>、  
  24. <%  
  25. }  
  26. %>  
  27. </h3>  
  28. <%  
  29.     Iterator<String> iter = all.iterator();  
  30.     while(iter.hasNext()){  
  31. %>  
  32.     <img alt="" src="../upload/<%=iter.next() %>">  
  33. <%                  
  34.     }  
  35. %>  
  36. </body>  
  37. </html>  
0 0
原创粉丝点击