zoukankan      html  css  js  c++  java
  • 图片上传类

      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
  • 相关阅读:
    OpenGL在图形管道中调用了什么用户模式图形驱动程序(UMD)?
    MLIR算子量化Quantization
    最大限度地减少块输出中间结果的计算和存储
    Echarts(一)
    Oracle部署安装
    JS使用
    sqlplus导入sql,dmp导入导出
    一款强大的Visual Studio插件!CodeRush v19.1.9全新来袭
    Web界面开发必看!Kendo UI for jQuery编辑功能指南第二弹
    报表开发神器!DevExpress Reporting v19.1全平台新功能解析
  • 原文地址:https://www.cnblogs.com/xianyuan/p/6159535.html
Copyright © 2011-2022 走看看