在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Linux/ Servlet上傳文件
Servlet web.xml welcome-file-list
Servlet從數(shù)據(jù)庫(kù)讀取記錄性能優(yōu)化
Servlet URL重寫帶參數(shù)
War文件
Web技術(shù)基礎(chǔ)
Servlet GenericServlet類
Servlet API
Servlet ServletInputStream類
使用MyEclipse創(chuàng)建Servlet
Servlet增刪改查
Servlet ServletConfig配置信息
Servlet Cookies
Servlet重定向
Servlet生命周期
Servlet HttpSession會(huì)話
Servlet HttpServlet類
Servlet注冊(cè)表單示例
Servlet表單隱藏字段
Servlet下載文件
Servlet教程
Servlet身份驗(yàn)證過濾器
Servlet ServletOutputStream類
Servlet HttpSession登錄注銷實(shí)例
Servlet啟動(dòng)時(shí)加載
Servlet事件和監(jiān)聽器
使用Eclipse創(chuàng)建Servlet
Servlet ServletContextEvent事件
Servlet HttpSessionEvent統(tǒng)計(jì)在線用戶數(shù)實(shí)例
Servlet RequestDispatcher請(qǐng)求轉(zhuǎn)發(fā)
Servlet使用注釋
Servlet過濾器示例
Servlet過慮器
Servlet ServletContext配置信息
Servlet登錄注銷Cookies實(shí)例
Servlet工作流程
Servlet會(huì)話跟蹤
Servlet登錄實(shí)例
Servlet ServletRequest接口
Servlet ServletRequestEvent類和接口
Servlet入門程序
Servlet查詢搜索數(shù)據(jù)示例
Servlet FilterConfig應(yīng)用示例
Servlet顯示所有頭信息
Servlet屬性設(shè)置
使用NetBeans創(chuàng)建Servlet
Servlet接口實(shí)現(xiàn)
Servlet上傳文件

Servlet上傳文件

在這里,我們將學(xué)習(xí)如何使用Servlet處理文件上傳到服務(wù)器。要將文件上傳到服務(wù)器,html文件中表單的方法必須指定為:post,并且enctype必須是multipart/form-data。 例如:

<form action="go" method="post" enctype="multipart/form-data">

注意: methodenctype指定的值不正確,文件將無法正常上傳和接收。

在servlet中將文件上傳到服務(wù)器的示例

要將文件上傳到服務(wù)器,有多種方法可以完成這個(gè)工作。但是,將使用由oreilly提供的MultipartRequest類。對(duì)于使用此類,必須有cos.jar文件。如果下載這個(gè)例子的項(xiàng)目代碼,我們已經(jīng)在項(xiàng)目目錄WEB-INF/lib附帶了cos.jar文件。

打開Eclipse,創(chuàng)建一個(gè)動(dòng)態(tài)Web項(xiàng)目:UploadFileHandle,其完整的目錄結(jié)構(gòu)如下所示 -

以下是這個(gè)項(xiàng)目中的幾個(gè)主要的代碼文件。

文件:index.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>文件上傳示例</title>
</head>
<body>
    <div style="margin: auto; text-align: center">
        <form action="upload" method="post" enctype="multipart/form-data">
            選擇文件:<input type="file" name="fname" /><input type="submit"
                value="上傳" />
        </form>
    </div>
</body>
</html>

文件:UploadServlet.java

package com.yiibai;

import java.io.*;
import java.util.Enumeration;

import javax.servlet.ServletException;
import javax.servlet.http.*;
import com.oreilly.servlet.MultipartRequest;

public class UploadServlet extends HttpServlet {

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        request.setCharacterEncoding("UTF-8");
        PrintWriter out = response.getWriter();
        // String dir = System.getProperty("user.dir")+"/uploads";
        String dir = request.getSession().getServletContext().getRealPath("");
        System.out.println("Save to path: " + dir);
        MultipartRequest mr = new MultipartRequest(request, dir);
        // 傳回所有文件輸入類型的名稱
        Enumeration files = mr.getFileNames();
        String fileName = "";
        String filePath = "";
        while (files.hasMoreElements()) {
            fileName = (String) files.nextElement();
            System.out.println("FileName = " + fileName);
            // 用此方法得到上傳文件的真正的文件名,這里的fileName指文件輸入類型的名稱
            filePath = mr.getFilesystemName(fileName);
            System.out.println("FilePath = " + filePath);
            // 此方法得到一個(gè)文件對(duì)象,代表儲(chǔ)存在服務(wù)器上的fileName文件
            File f = mr.getFile(fileName);
            if (null == f) {
                throw new ServletException("file is not exist");
            }
        }
        out.print("successfully uploaded");
        out.close();
    }
}

注意:
MultipartRequest類構(gòu)造函數(shù)中傳遞了兩個(gè)參數(shù),第一個(gè)是HttpServletRequest對(duì)象,第二個(gè)是String對(duì)象(指定存儲(chǔ)目錄位置)。在這里假設(shè)在當(dāng)前項(xiàng)目文件下存儲(chǔ)上傳的文件。

文件:web.xml

此配置文件提供有關(guān)servlet的信息。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
    id="WebApp_ID" version="3.1">
    <display-name>UploadFileHandle</display-name>
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
    <servlet>
        <servlet-name>UploadServlet</servlet-name>
        <servlet-class>com.yiibai.UploadServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>UploadServlet</servlet-name>
        <url-pattern>/upload</url-pattern>
    </servlet-mapping>
</web-app>

在編寫上面代碼后,部署此Web應(yīng)用程序(在項(xiàng)目名稱上點(diǎn)擊右鍵->”Run On Server…”),打開瀏覽器訪問URL: http://localhost:8080/UploadHandle/ ,如果沒有錯(cuò)誤,應(yīng)該會(huì)看到以下結(jié)果 -

在選擇好要上傳文件后,提交上傳,打開項(xiàng)目部署的目錄,將會(huì)看到文件已經(jīng)上傳成功 -

同時(shí)在終端上也輸出以下有關(guān)文件的信息:

Save to path: F:\worksp\servlet\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\UploadFileHandle\
FileName = fname
FilePath = 0171015223409.png

上傳文件處理方法二

以下是UploadServlet的源代碼,可以一次處理多個(gè)文件上傳。在進(jìn)行之前,請(qǐng)確保以下內(nèi)容準(zhǔn)備完成 -

  • 以下示例使用上傳組件:FileUpload,因此請(qǐng)確保類路徑中有最新版本的commons-fileupload.x.x.jar文件??梢詮?http://commons.apache.org/fileupload/ 下載。
  • FileUpload上傳組件取決于Commons IO,因此請(qǐng)確保類路徑中有最新版本的commons-io-x.x.jar文件,可以從 http://commons.apache.org/io/ 下載。
  • 在測(cè)試以下示例之前,應(yīng)該上傳的文件的大小設(shè)置為小于maxFileSize,否則將不會(huì)上傳文件。

確保提前創(chuàng)建目錄C:\tempwebapps\data,如何實(shí)現(xiàn)請(qǐng)參考以下代碼 -

// Import required java libraries
import java.io.*;
import java.util.*;

import javax.servlet.ServletConfig;
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;
import org.apache.commons.io.output.*;

public class UploadServlet extends HttpServlet {

   private boolean isMultipart;
   private String filePath;
   private int maxFileSize = 50 * 1024;
   private int maxMemSize = 4 * 1024;
   private File file ;

   public void init( ){
      // Get the file location where it would be stored.
      filePath = getServletContext().getInitParameter("file-upload"); 
   }

   public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, java.io.IOException {

      // Check that we have a file upload request
      isMultipart = ServletFileUpload.isMultipartContent(request);
      response.setContentType("text/html");
      java.io.PrintWriter out = response.getWriter( );

      if( !isMultipart ) {
         out.println("<html>");
         out.println("<head>");
         out.println("<title>Servlet upload</title>");  
         out.println("</head>");
         out.println("<body>");
         out.println("<p>No file uploaded</p>"); 
         out.println("</body>");
         out.println("</html>");
         return;
      }

      DiskFileItemFactory factory = new DiskFileItemFactory();

      // maximum size that will be stored in memory
      factory.setSizeThreshold(maxMemSize);

      // Location to save data that is larger than maxMemSize.
      factory.setRepository(new File("c:\\temp"));

      // Create a new file upload handler
      ServletFileUpload upload = new ServletFileUpload(factory);

      // maximum file size to be uploaded.
      upload.setSizeMax( maxFileSize );

      try { 
         // Parse the request to get file items.
         List fileItems = upload.parseRequest(request);

         // Process the uploaded file items
         Iterator i = fileItems.iterator();

         out.println("<html>");
         out.println("<head>");
         out.println("<title>Servlet upload</title>");  
         out.println("</head>");
         out.println("<body>");

         while ( i.hasNext () ) {
            FileItem fi = (FileItem)i.next();
            if ( !fi.isFormField () ) {
               // Get the uploaded file parameters
               String fieldName = fi.getFieldName();
               String fileName = fi.getName();
               String contentType = fi.getContentType();
               boolean isInMemory = fi.isInMemory();
               long sizeInBytes = fi.getSize();

               // Write the file
               if( fileName.lastIndexOf("\\") >= 0 ) {
                  file = new File( filePath + fileName.substring( fileName.lastIndexOf("\\"))) ;
               } else {
                  file = new File( filePath + fileName.substring(fileName.lastIndexOf("\\")+1)) ;
               }
               fi.write( file ) ;
               out.println("Uploaded Filename: " + fileName + "<br>");
            }
         }
         out.println("</body>");
         out.println("</html>");
         } catch(Exception ex) {
            System.out.println(ex);
         }
      }

      public void doGet(HttpServletRequest request, HttpServletResponse response)
         throws ServletException, java.io.IOException {

         throw new ServletException("GET method used with " +
            getClass( ).getName( )+": POST method required.");
      }
   }
}