JSP使用commons-fileupload实现文件上传

jopen 5年前

1、准备:

将commons-fileupload-1.1.zip和commons-io-1.1.zip复制到"\WEB-INF\lib"目录下

2、首先是Servlet:FileUpload.java

package servlet;    import java.io.File;  import java.io.IOException;  import java.io.PrintWriter;  import java.util.*;  import java.util.regex.Pattern;  import java.util.regex.Matcher;    import javax.servlet.ServletException;  import javax.servlet.http.HttpServlet;  import javax.servlet.http.HttpServletRequest;  import javax.servlet.http.HttpServletResponse;    import org.apache.commons.fileupload.FileItem;  import org.apache.commons.fileupload.FileUploadException;  import org.apache.commons.fileupload.disk.DiskFileItemFactory;  import org.apache.commons.fileupload.servlet.ServletFileUpload;    public class FileUpload extends HttpServlet {      private String uploadPath="E:\\addnetFile\\";//要上传文件的目录   private File tempPath=new File("E:\\tempFile\\");//存放上传的文件的目录      public void doGet(HttpServletRequest request, HttpServletResponse response)     throws ServletException, IOException {   }     public void doPost(HttpServletRequest request, HttpServletResponse response)     throws ServletException, IOException {    response.setContentType("text/html;charset=GB2312");    response.setCharacterEncoding("gb2312");    PrintWriter out=response.getWriter();    out.println("请求内容的长度为:"+request.getContentLength());    out.println("请求内容的类型为:"+request.getContentType());        DiskFileItemFactory factory=new DiskFileItemFactory();    factory.setRepository(tempPath);    factory.setSizeThreshold(4096);        ServletFileUpload upload=new ServletFileUpload(factory);    upload.setSizeMax(1000000);    List<?> fileitems=null;    try{     fileitems=upload.parseRequest(request);     Iterator<?> iterator=fileitems.iterator();     String regex=".+\\\\(.+)$";     String[] errortype={".exe",".com",".cgi",".asp"};     Pattern p=Pattern.compile(regex);     while(iterator.hasNext()){      FileItem item=(FileItem) iterator.next();      if(!item.isFormField()){       String name=item.getName();       long size=item.getSize();       if(name==null||name.equals("")&&size==0)        continue;       Matcher m=p.matcher(name);       if(m.find()){        for(int temp=0;temp<errortype.length;temp++){         if(m.group(1).endsWith(errortype[temp]))          throw new IOException(name+":wrong type");        }        try{         item.write(new File(tempPath,m.group(1)));         out.println(name+"  "+size+"<br/>");         out.println("上传成功");        }catch(Exception e){         out.println("333"+e);        }        }       else{        throw new IOException("fail to upload");       }              }     }    }catch(IOException e){     out.println("222"+e);    }    catch(FileUploadException e1){     e1.printStackTrace();     out.println("111"+e1);    }   }     public void init() throws ServletException {    if(!new File(uploadPath).isDirectory())     new File(uploadPath).mkdir();    if(!tempPath.isDirectory())     tempPath.mkdir();   }      public void destroy(){    super.destroy();   }    }

3、其次是html:Uploadfile.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  <html>    <head>      <title>Uploadfilel.html</title>         <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">      <meta http-equiv="description" content="this is my page">      <meta http-equiv="content-type" content="text/html; charset=UTF-8">            <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->      </head>        <body>      <form action="/Firstjsp/servlet/FileUpload" method="post" enctype="multipart/form-data" name="form1">      <input type="file" name="file"/>      <input type="submit" name="submit" value="upload"/>      </form>      <form action="/Firstjsp/servlet/FileUpload" method="post" enctype="multipart/form-data" name="uploadform">      <table>      <tr>       <td>       文件1:<input type="file" name="X" size="40"/>       </td>      </tr>      <tr>       <td>       文件2:<input type="file" name="Y" size="40"/>       </td>      </tr>      <tr>       <td>       文件3:<input type="file" name="Z" size="40"/>       </td>      </tr>      </table>      <input type="submit" name="upload" value="开始上传"/>       </form>    </body>  </html>

4、最后是配置web.xml

<servlet>      <description>This is the description of my J2EE component</description>      <display-name>This is the display name of my J2EE component</display-name>      <servlet-name>FileUpload</servlet-name>      <servlet-class>servlet.FileUpload</servlet-class>    </servlet>  <servlet-mapping>      <servlet-name>FileUpload</servlet-name>      <url-pattern>/servlet/FileUpload</url-pattern>

首先运行html,servlet处理上传请求