FileUpBean.java
上传用户:u_thks
上传日期:2022-07-31
资源大小:1910k
文件大小:9k
源码类别:

WEB源码(ASP,PHP,...)

开发平台:

Java

  1. package com.gamvan.fileUpload;
  2. import java.io.File;
  3. import java.io.IOException;
  4. import java.util.HashMap;
  5. import java.util.Iterator;
  6. import java.util.List;
  7. import java.util.StringTokenizer;
  8. import java.util.regex.Matcher;
  9. import java.util.regex.Pattern;
  10. import javax.servlet.ServletConfig;
  11. import javax.servlet.ServletContext;
  12. import javax.servlet.ServletException;
  13. import javax.servlet.http.HttpServletRequest;
  14. import javax.servlet.http.HttpServletResponse;
  15. import javax.servlet.jsp.PageContext;
  16. import com.gamvan.tools.TypeChange;
  17. public class FileUpBean {
  18.     public String message = "";
  19.     public String fileSavePath = ""; // 文件上传后保存的路径。
  20.     public String fileTempPath = ""; //文件上 传后保存的路径。
  21.     public String vPath = ""; //文件上传的相对路径
  22.     private String newFileName = "";
  23.     private String oldFileName = "";
  24.     private String oldFilePath = "";
  25.     private String fileExt = ""; //文件扩展名
  26.     private int maxFileSize = 0; //文件最大值。单位KB
  27.     public long fileSize = 0; //文件大小,单位字节
  28.     public long myFileSize = 0; //个人上传空间限制。结合club。
  29.     private long readsBytes = 0; //读取上传进度
  30.     public String allowedType = ""; //允许上传得文件类型。
  31.     protected HttpServletRequest g_request;
  32.     protected HttpServletResponse g_response; 
  33.     protected ServletContext g_application;
  34.  
  35.     public final void init(ServletConfig servletconfig) throws ServletException
  36.     {
  37.         g_application = servletconfig.getServletContext();
  38.     }
  39.     public void service(HttpServletRequest httpservletrequest,HttpServletResponse httpservletresponse) throws ServletException,IOException
  40.     {
  41.         g_request = httpservletrequest;
  42.         g_response = httpservletresponse;
  43.     }
  44.     public final void initialize(ServletConfig servletconfig,HttpServletRequest httpservletrequest,HttpServletResponse httpservletresponse) throws ServletException
  45.     {
  46.         g_application = servletconfig.getServletContext();
  47.         g_request = httpservletrequest;
  48.         g_response = httpservletresponse;
  49.     }
  50.     public final void initialize(PageContext pagecontext) throws ServletException
  51.     {
  52.         g_application = pagecontext.getServletContext();
  53.         g_request = (HttpServletRequest)pagecontext.getRequest();
  54.         g_response = (HttpServletResponse)pagecontext.getResponse();
  55.     }
  56.     
  57.     HashMap hm = new HashMap();
  58.     
  59.     public boolean saveFile() throws Exception {
  60.         boolean bea =false;
  61.         try {
  62. //为该请求创建一个句柄,通过它来解析请求。执行
  63. //解析后,所有的表单项目都保存在一个List中。
  64.             DiskFileUpload dfu = new DiskFileUpload();
  65.             /*开始读取上传信息
  66.              * 以参数形式传递文件上传大小限制,临时目录,最大内存使用数
  67.              * List fileItems = dfu.parseRequest(g_request,4096, maxFileSize,fileTempPath);
  68.              */
  69.             
  70.             // 设置允许用户上传文件大小,单位:字节,这里设为2m
  71.             dfu.setSizeMax(maxFileSize);
  72.             // 设置最多只允许在内存中存储的数据,单位:字节
  73.             dfu.setSizeThreshold(4096);
  74.             // 设置一旦文件大小超过setSizeThreshold()的值时数据存放在硬盘的目录
  75.             dfu.setRepositoryPath(fileTempPath);
  76.             
  77.             
  78.             // parseRequest是DiskFileUpload继承自FileUpoadBase的方法
  79.             //通过句柄解析请求,解析得到的项目保存在一个List中
  80.             List fileItems = dfu.parseRequest(g_request);
  81.             
  82.             
  83.             /*
  84.              *  通过循环依次获得List里面的文件项目。要区分表示
  85.  * 文件的项目和普通的表单输入项目,使用isFormField()方法。
  86.  * 根据处理请求的要求,我们可以保存上载的文件,
  87.  *  或者一个字节一个字节地处理文件内容,或者打开文件的输入流。
  88.              */
  89.             Iterator iter = fileItems.iterator();
  90.             
  91.             //正则匹配,过滤路径取文件名
  92.             String separator = java.io.File.separator;
  93.             String regExp=".+"+separator+separator+"(.+)$";
  94.             Pattern p = Pattern.compile(regExp);
  95.             while (iter.hasNext()) {
  96.                 /**
  97.                  * 进度读取
  98.                  */
  99.                 this.readsBytes = dfu.getReadsBytes();
  100.                 FileItem item = (FileItem)iter.next();
  101.                 //忽略其他不是文件域的所有表单信息
  102.                 if (item.isFormField()) {
  103.                     hm.put(item.getFieldName(),item.getString("UTF-8"));
  104.                 }else{
  105.                     String name = item.getName();
  106.                     oldFilePath = name;
  107.                     fileSize = item.getSize();
  108.                     if(myFileSize<fileSize/1024){
  109.                         message = "<font color="#bb0000"> 您的空间已满、或者你选择的文件过大,不能执行上载。</font>";
  110.                         message += "<br/>您的上传的文件大小约为:" + fileSize/1024;
  111.                         message += "<br/>您的剩余上传空间约为:" + myFileSize;
  112.                         return false;
  113.                     }
  114.                     if((name==null||name.equals("")) && fileSize==0)
  115.                         continue;
  116.                         Matcher m = p.matcher(name);
  117.                         boolean result = m.find();
  118.                         oldFileName = m.group(1); //取得原文件名
  119.                         int f = 0;
  120.                         f = oldFileName.lastIndexOf('.') + 1;
  121.                         fileExt = oldFileName.substring(f, oldFileName.length()).toLowerCase();  //取得文件扩展名
  122.                         newFileName = newFileName + "." + fileExt;
  123.                         if (result){
  124.                             StringTokenizer st = new StringTokenizer(allowedType, "|");
  125.                             String[] ishave = new String[st.countTokens()];
  126.                             boolean passType = false; //判断文件类型是否属于允许的上传类型
  127.                             for(int i=0;st.hasMoreTokens();i++){
  128.                                     ishave[i]=st.nextToken().trim();
  129.                                     oldFileName = oldFileName.toLowerCase(); //全部替换成小写
  130.                                    if (oldFileName.endsWith(ishave[i])){
  131.                                       passType = true;
  132.                                    }  
  133.                             } 
  134.                             if(!passType){
  135.                                 message = "<a href="javascript:history.back()">"+oldFileName+":此文件类型被禁止上传。</a>";
  136.                                 return false;
  137.                             }else{
  138.                                 try{
  139.                                    //保存上传的文件到指定的目录
  140.                                    item.write(new File(fileSavePath + newFileName));
  141.                                    message = "&nbsp;&nbsp;"+fileSize+"<br>";
  142.                                    bea = true;
  143.                                 }
  144.                                 catch(Exception e){
  145.                                      message = e.toString();
  146.                                      return false;
  147.                                 }
  148.                             }
  149.                     }else{
  150.                         message = "fail to upload" ; //上传失败!
  151.                         bea = false;
  152.                     }
  153.                 }
  154.             }
  155.         }catch (Exception e){
  156.             message = e.toString();
  157.         }
  158.         return bea;
  159.     }
  160.     
  161.     /**
  162.      * 取表单数据方法
  163.      */
  164.     public String getFiledNameValue(String id){
  165.         String str = new String();
  166.         if(hm.containsKey(id)){
  167.             str = hm.get(id).toString();
  168.         }else{
  169.             str = null;
  170.         }
  171.         return str;
  172.     }
  173.     
  174.     public String getParameter(String s){
  175.         return s;
  176.     }
  177.     
  178.     /**
  179.      * 进度读取 
  180.      */
  181.     public long getReadsBytes(){
  182.         return this.readsBytes;
  183.     }  
  184.     
  185.     
  186.     public void setFileSavePath(String s){
  187.         this.fileSavePath = s;
  188.     }
  189.     
  190.     
  191.     public void setFileTempPath(String s){
  192.         this.fileTempPath = s;
  193.     }
  194.     
  195.     public void setMyFileSize(double d){
  196.         this.myFileSize = TypeChange.doubleToLong(d);
  197.     }
  198.     
  199.     public void setMyFileSize(long i){
  200.         this.myFileSize = i;
  201.     }
  202.     
  203.     public void setMaxFileSize(int i){
  204.         this.maxFileSize = i;
  205.     }
  206.     
  207.     public void setAllowedType(String s){
  208.         this.allowedType = s;
  209.     }
  210.     
  211.     public void setNewFileName(String s){
  212.         this.newFileName = s;
  213.     }
  214.     
  215.     public String getFileExt(){
  216.         return this.fileExt;
  217.     }
  218.     
  219.     public String getNewFileName(){
  220.         return this.newFileName;
  221.     }
  222.     
  223.     
  224.     public String getOldFileName(){
  225.         return this.oldFileName;
  226.     }
  227.     
  228.     
  229.     public String getOldFilePath(){
  230.         return this.oldFilePath;
  231.     }
  232.     
  233.     public String getFileSavePath(){
  234.         return this.fileSavePath;
  235.     }
  236.     
  237.     public long getMyFileSize(){
  238.         return this.myFileSize;
  239.     }
  240.     
  241.     public long getFileSize(){
  242.         return this.fileSize;
  243.     }
  244.     
  245.     public String getMessage(){
  246.         return this.message;
  247.     }
  248.    
  249. }