1. 程式人生 > >servlet實現form表單的檔案上傳

servlet實現form表單的檔案上傳

注:該方法需要用到commons-fileupload-1.2.2.jar和commons-io-2.4.jar兩個包,自行下載。

首先,需要在form表單中設定enctype="multipart/form-data"屬性,就能實現檔案上傳,但是由於enctype="multipart/form-data"是以二進位制​的資料格式傳輸,所以在servlet中無法通過request.getParameter("name")獲得值。具體方法如下(紅色加粗表示對上傳檔案格式的判斷,可自行選擇):

List fileType = newArrayList();

   fileType.add("gif");

   fileType.add("jpg");

   fileType.add("png");

   fileType.add("rar");

​    request.setCharacterEncoding("utf-8");

    StringuploadFileName="";//上傳的檔名

    StringfieldName="";//表單欄位元素的name屬性值

   //請求資訊中的內容是否是multipart型別

    booleanisMultipart =ServletFileUpload.isMultipartContent(request);

   //上傳檔案的儲存路徑(伺服器檔案系統上的絕對檔案路徑)

    StringuploadFilePath =request.getSession().getServletContext().getRealPath("upload/");//此時需要在WebRoot下建立一個“upload"資料夾

   if(isMultipart) {

   FileItemFactory factory = new DiskFileItemFactory();

   ServletFileUpload upload = newServletFileUpload(factory);

    upload.setSizeMax(1024 *1024*20);//20M大小

    try {

        //解析form表單中所有檔案

        List items =upload.parseRequest(request);

        Iterator iter =items.iterator();

        while(iter.hasNext()) {//依次處理每個檔案

        FileItem item = (FileItem)iter.next();

        String fileName =item.getName();

        if(item.isFormField()){//如果是普通表單輸入域

             fieldName =item.getFieldName();//表單欄位的name屬性值

             if(fieldName.equals("fname")){//fname為form表單裡對應的name的值

             lastName =item.getString("UTF-8");//lastName用來接收與name相對應的value的值

              }

         } else {//如果是檔案上傳域

                 Stringext =fileName.substring(fileName.lastIndexOf(".") + 1);

                  if (fileType.contains(ext)){

                       if (fileName != null&& !fileName.equals("")) {

                       File fullFile = newFile(item.getName());

                       File saveFile = newFile(uploadFilePath,fullFile.getName());

                       item.write(saveFile);//上傳

                       uploadFileName =fullFile.getName();

                       }

                   } else {

                           response.sendRedirect("........");

                          } 

                   }

             }

        } catch (Exception e) {

                response.sendRedirect("..........");

       }

}