从SmartUpload到FileUpload的无缝转移

  在修改项目时,发现以前的jsp项目,附件上传用的是SmartUpload,系统中多处都用的是这这种方式上传,这种上传附件的机制大小只能传十兆左右,

而客户现在要求,至少50M,所以原有的SmartUpload不能满足需求,所以打算用Fileupload来实现附件上传功能。但如果换FileUpload,则系统代码改动量很大,大概有50于处地方都需要修改,遂放弃,直接修改代码的想法。

     于是,看了一些代码后,自己写了一个从SmartUload到FileUpload转接的中间件程序,可实现不用修改原有SmartUpload上传的代码。

原上传的主要代码见下面:

SmartUpload objUpload = new SmartUpload(pageContext);  
///主要代码  
if(objUpload.getCount()>0)  
            {  
                for(int i=1;i<=objUpload.getCount();i++){   
                    ps.setString(9,objUpload.getUgetContentType(i));  
                    ps.setString(10,objUpload.getUFileName(i));  
                    ps.setBinaryStream(11,objUpload.getUFileInputStream(i),   objUpload.getFLength(i));//Content   
                }   
            }  
 

我写的中间件类,类名也叫SmartUpload,但用的是Fileupload上传的机制:

package gui;  
import java.io.*;  
import java.sql.ResultSet;  
import java.sql.SQLException;  
import java.util.*;  
import javax.servlet.ServletConfig;  
import javax.servlet.ServletContext;  
import javax.servlet.ServletException;  
import javax.servlet.http.HttpServlet;  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
import javax.servlet.http.HttpSession;  
import javax.servlet.jsp.JspWriter;  
import javax.servlet.jsp.PageContext;  
import org.apache.commons.fileupload.*;  
import org.apache.commons.fileupload.servlet.*;  
import org.apache.commons.fileupload.disk.*;  
   
   
// Referenced classes of package gui:  
//  SmartFiles, SmartRequest, SmartUploadException, SmartFile  
   
public class SmartUpload  
{  
   
       
     protected Hashtable parameters;//保存普通form表单域  
     protected Hashtable files;//保存上传的文件      
     private int sizeThreshold = 4096;  
     public  int maxflag=0;  
    private long filemaxsize=100*1024*1024;    //默认100MB     
    protected HttpServletRequest m_request;  
    protected HttpServletResponse m_response;  
    protected ServletContext m_application;  
    private PageContext page;  
    private String pencoding;  
      
    public SmartUpload()  
    {  
    }
         //构造方法 参数一 pagecontex 参数二 一般为GBK  参数三 上传的最大文件 单位MB  
    public SmartUpload(PageContext pagecontext,String encoding,long filesize)  
    throws ServletException, IOException,FileUploadException  
    {  
       page=null;  
      page=pagecontext;  
      m_request=(HttpServletRequest)page.getRequest();  
      m_response=(HttpServletResponse)page.getResponse();  
      if(encoding==null||"".equals(encoding)) encoding="GBK";  
      this.pencoding=encoding;        
      if(filesize<3) filesize=100;   
      System.out.println("fileupload版本号:sun2009101303.  最大上传:"+filesize+"Mb");  
      this.filemaxsize=filesize*1024*1024;        
      pageinit(m_request);    
          
    }     
//  构造方法 参数一 pagecontex 参数二  上传的最大文件 单位MB  
    public SmartUpload(PageContext pagecontext,long filesize)  
    throws ServletException, IOException,FileUploadException  
    {  
    this(pagecontext,"GBK",filesize);  
    }   
      
//  构造方法 参数一 pagecontex 参数二   编码格式  
    public SmartUpload(PageContext pagecontext,String encode)  
    throws ServletException, IOException,FileUploadException  
    {  
    this(pagecontext,encode,100);  
    }       
      
//  构造方法 参数一 pagecontex 默认GBK 默认大小100MB     
    public SmartUpload(PageContext pagecontext)  
         throws ServletException, IOException,FileUploadException  
    {  
        this(pagecontext,"GBK",100);  
    }    
      
    public void pageinit(HttpServletRequest request) throws FileUploadException  
    {  
        int filecount=0; //附件个数   
        parameters = new Hashtable();  
        files = new Hashtable();  
        DiskFileItemFactory factory = new DiskFileItemFactory();  
        factory.setSizeThreshold(sizeThreshold);  
        ServletFileUpload upload = new ServletFileUpload(factory);  
        upload.setHeaderEncoding(this.pencoding);  
          
        upload.setFileSizeMax(filemaxsize);  
        try {  
            List items = upload.parseRequest(request);  
            Iterator iterator = items.iterator();  
            while(iterator.hasNext()){  
                FileItem item = (FileItem)iterator.next();  
                if(item.isFormField()){                      
                    String fieldName = item.getFieldName();  
                    String value = item.getString();  
                    //----------  
                    if(parameters.containsKey(fieldName))  
                    {  
                        Hashtable hashtable = (Hashtable)parameters.get(fieldName);  
                        hashtable.put(new Integer(hashtable.size()), value);  
                    } else  
                    {  
                        Hashtable hashtable1 = new Hashtable();  
                        hashtable1.put(new Integer(0), value);  
                        parameters.put(fieldName, hashtable1);  
                    }  
                    //------------  
                }else{  
                    //去除掉空的。没选择文件的file。  
                    if(item.getSize()>filemaxsize)  
                    {  
                        maxflag=1;  
                        System.out.println("文件过大="+item.getSize()+";最大值为="+filemaxsize/1024/1024+"MB");  
                    }  
                    if(item.getName()!=null&&!"".equals(item.getName()))  
                    {  
                    filecount=filecount+1;                                   
                    files.put(filecount+"", item);  
                    }  
                     
                }  
            }  
        } catch (FileUploadException e) {  
            e.printStackTrace();  
        }  
    }  
       
      
    /**取得表单元素值。**/  
    public String getParameter(String s)  
    {  
        return this.getParameter(s,this.pencoding);           
           
    }  
      
    /**取得表单元素值。 可以选择编码方式,根据传递过来的来设定**/  
    public String getParameter(String s,String encode)  
    {  
           
        if(s == null)  
            throw new IllegalArgumentException("表单名字无效!!!");  
        Hashtable one = (Hashtable)parameters.get(s);  
        if(one==null)  
            return null;  
        String returnvalue=(String)one.get(new Integer(0));  
        if(returnvalue==null) returnvalue="";  
        try {  
            returnvalue=new String(returnvalue.getBytes("ISO-8859-1"),encode);  
        } catch (UnsupportedEncodingException e) {  
            e.printStackTrace();  
            return null;  
        }            
        if(returnvalue == null)  
            return null;  
        else  
            return returnvalue;  
    }   
      
    public String[] getParameterValues(String s)  
    {  
        if(s == null)  
            throw new IllegalArgumentException("Form's name is invalid or does not exist (1305).");  
        Hashtable hashtable = (Hashtable)this.parameters.get(s);  
        if(hashtable == null)  
            return null;  
        String as[] = new String[hashtable.size()];  
        for(int i = 0; i < hashtable.size(); i++)  
            as[i] = (String)hashtable.get(new Integer(i));  
        return as;  
    }  
    public SmartUpload getRequest()  
    {      
        return this;  
    }  
    public Enumeration getParameterNames()  
    {  
        return this.parameters.keys();  
    }  
    public SmartUpload getFiles()  
    {   
            return this;  
    }  
      
    public int getCount()  //返回附件个数  
    {  
         return files.size();  
    }  
    public int getFCount() //返回附件个数  
    {  
        return getCount();  
    }  
    public String getUFileName(int aa)  
    {  
           //aa表示第几个附件,返回上传附件的名字   
          
          FileItem item=(FileItem)files.get(aa+"");        
          String fileName = item.getName();            
          fileName = fileName.substring(fileName.lastIndexOf("\\")+1);            
          return fileName;  
    }  
    public String getFieldNames(int aa) //返回附件表单域的name  
    {  
         FileItem item=(FileItem)files.get(aa+"");  
          return item.getFieldName();  
    }  
    public String getUgetContentType(int aa)  
    {  
//      aa表示第几个附件,返回附件的格式,比如doc,xml,mp3  
         FileItem item=(FileItem)files.get(aa+"");        
      return item.getContentType();  
    }  
      
    public InputStream getUFileInputStream(int aa) throws IOException//返回输入流  
    {  
        FileItem item=(FileItem)files.get(aa+"");      
          return item.getInputStream();          
    }  
       
      
    public int getFLength(int aa)  //返回附件大小  
    {  
         FileItem item=(FileItem)files.get(aa+"");        
          return (int)item.getSize();  
    }  
    public boolean isUfile(int aa)  //判断该附件是否为空。  
    {  
        if(getUFileName(aa).equals(""))  
            return false;  
        else  
            return true;  
    }  
    public void  clean()   
    {  
        //System.out.println("g关闭流文件");  
        //关闭流文件等资源性  
    }  
}  
 


这样,就可以实现从SmartUload到FileUpload的无缝转换了。原来项目的代码不用改动。自动转化成fileUPlaod上传机制。

你可能感兴趣的:(apache,sql,jsp,中间件,servlet)