JSP使用commons-fileupload實現文件上傳

jopen 11年前發布 | 116K 次閱讀 文件上傳 commons-fileupload

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處理上傳請求

 

 

 

 

 

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!