图片上传类

  1 import java.util.*;
  2 import java.lang.*;
  3 import java.io.File;
  4 import java.util.HashMap;
  5 import java.util.List;
  6 import java.util.Map;
  7 import javax.servlet.http.HttpServletRequest;
  8 import org.apache.commons.fileupload.FileItem;
  9 import org.apache.commons.fileupload.disk.DiskFileItemFactory;
 10 import org.apache.commons.fileupload.servlet.ServletFileUpload;
 11 class FileUpload{
 12     //允许上传的文件类型们
 13     private String[] fileTypes = null;
 14     //上传文件保存路径
 15     private String savapath = null;
 16     //允许上传文件的最大值
 17     private long fileSizeMax=10*1024*1024;
 18     //缓存路径
 19     private String cachePath=null;
 20     //最大缓存值
 21     int cacheSizeMax = 5*1024*1024;
 22     //表单中的文本文件用Map保存
 23      private Map<String,String> textcontent;
 24     private ServletFileUpload servletFileUpload;
 25     //定义文件工厂
 26     private DiskFileItemFactory factory=new DiskFileItemFactory();
 27     //定义构造方法
 28     public FileUpload(){}
 29     
 30     public FileUpload(String[] fileTypes,String savapath,long fileSizeMax,String cachePath,int cacheSizeMax){
 31         super();
 32         this.fileTypes = fileTypes;
 33         this.savapath = savapath;
 34         this.fileSizeMax = fileSizeMax;
 35         this.cachePath = cachePath;
 36         this.cacheSizeMax = cacheSizeMax;
 37     }
 38     
 39     public FileUpload(String[] fileTypes,String savapath,String cachePath,){
 40         super();
 41         this.fileTypes = fileTypes;
 42         this.savapath = savapath;
 43         this.cachePath = cachePath;
 44     }
 45     public void setCachePath(String cachePath){
 46         this.cachePath=cachePath;
 47     }
 48     public void setCacheSize(int size){
 49         this.cacheSizeMax=size;
 50     }
 51     public void setDstPath(String path){
 52         this.savaPath=path;
 53     }
 54     public void setFileSize(long size){
 55         this.fileSizeMax=size;
 56     }
 57     public void setFileType(String[] types){
 58         this.fileTypes=types;
 59     }
 60     //获取文件后缀名
 61     public String getFileExt(File file){
 62         String path=file.getName();
 63         return path.substring(path.lastIndexOf(".")+1);
 64     }
 65     
 66     //获取文本文件
 67     public Map<String,String> getTextContent(){
 68         return textcontent;
 69     }
 70     
 71      //把提取到的文本内容们赋给类本身的map对象,以供外界取用
 72     public void setTextContent(Map<String,String> map){
 73         this.textcontent=map;
 74     }
 75     public ServletFileUpload getServletFileUpload(){
 76         if(servletFileUpload==null){
 77             servletFileUpload=new ServletFileUpload(factory);
 78             return servletFileUpload;
 79         }else{
 80             return servletFileUpload;
 81         }
 82     }
 83      //判断文件是否为合法的类型
 84     public boolean isFileValidate(File file){
 85         if(fileTypes==null){return true;}
 86         for(int i=0;i<fileTypes.length;++i){
 87             if(fileTypes[i].equals(getFileExt(file))){
 88                 return true;
 89             }
 90         }
 91         return false;
 92     }
 93      //创建文件目录:用于后面根据路径来创建文件保存目录、缓存目录
 94     public void makeDir(String url){        
 95             File file=new File(url);
 96             if(!file.exists()){
 97                 if(!file.mkdirs()){
 98                     System.out.println("fail to create dir!");
 99                 }
100             }
101     }
102     //上传方法
103     public void upload(HttpServletRequest request){
104         
105         try{
106         if(!ServletFileUpload.isMultipartContent(request)){
107             return;
108         }
109         makeDir(dstPath);//创建文件保存目录
110         makeDir(cachePath);    //创建缓存目录
111         factory.setRepository(new File(cachePath));//设置缓存路径
112         factory.setSizeThreshold(cacheSizeMax);//设置缓存大小
113         ServletFileUpload sfu=getServletFileUpload();//获取上传类    
114         sfu.setFileSizeMax(fileSizeMax);//设置上传文件允许的最大值
115         
116     
117         List<FileItem> items=sfu.parseRequest(request);//提取请求中附带的文件们
118         Map<String,String> map =new HashMap<String,String>();//创建一个map对象来提取上传表单中的文本内容
119         
120         //迭代提取上传的文件们
121         Iterator it=items.iterator();
122         while(it.hasNext()){
123             FileItem  fileItem=(FileItem)it.next();
124             if(fileItem.isFormField()){//如果是文本内容,则提取出来放进map里
125                 map.put(fileItem.getFieldName(),fileItem.getString("UTF-8"));
126             }else{//如果不是文本,则为文件
127                 String path=fileItem.getName();//获取文件名
128                 long size=fileItem.getSize();//获取文件大小
129                 if ("".equals(path) || size == 0) {//无效文件的判断
130                 System.out.println("not validate file");
131                 return;
132                 }
133                 
134                 File file=new File(dstPath,new File(fileItem.getName()).getName());//根据文件名在文件保存路径下创建一个同名文件
135                 if(!isFileValidate(file)){//判断文件类型是否合法
136                 System.out.println("file type incorrect!");
137                 }else{
138                     fileItem.write(file);//文件合法,则通过IO流把上传文件写到文件路径下
139 
140                 }
141             }
142             }
143         setTextContent(map);//表单文本内容提取完毕,把map中的内容set给类中的textContent对象。
144         }catch(Exception ex){
145             System.out.println(ex);
146         }        
147     }
148 }
View Code

 

posted @ 2016-12-11 14:01  花生瓜子八宝粥  阅读(144)  评论(0编辑  收藏  举报