隨筆 - 45, 文章 - 2, 評論 - 11, 引用 - 0
          數據加載中……

          翻譯:使用Servlet實現文件上傳

          原文地址:http://www.tutorialspoint.com/servlets/servlets-file-uploading.htm

           

          一個Servlet可以通過HTML表單標簽將文件上傳到服務器。支待上傳的有文本、圖像及任何文件。

          創建文件上傳表單:

                   下面的html代碼創建了一個上傳表單。創建過程需要注意以下幾點:

          form標簽中的method屬性必須設置為POST,即GET方法是不可以的。

          form標簽中的enctype屬性應該設置為multipart/form-data

          from標簽中的action屬性應該與服務器后臺的servlet映射路徑相同。接下來的實例,我們將使用UploadServlet實現文件上傳。

          要上傳一個文件,你應該使用一個<input type=”file”.../>標記。要多個文件上傳,必須包含多個具有不同的名稱屬性值的<input type=”file”.../>標記。The browser associates a Browse button with each of them

          <html>

          <head>

          <title>File Uploading Form</title>

          </head>

          <body>

          <h3>File Upload:</h3>

          Select a file to upload: <br />

          <form action="UploadServlet" method="post"

                                  enctype="multipart/form-data">

          <input type="file" name="file" size="50" />

          <br />

          <input type="submit" value="Upload File" />

          </form>

          </body>

          </html>

          以上代碼將得到以下效果。你可以在本地PC上選擇一個文件。當你點擊“Upload File”,表單將會隨著你選擇的文件一起被提交。

          后臺servlet

          以下UploadServlet servlet將接收上傳的文件并將其保存入<Tomcat-installation-directory>/webapps/data文件夾。這個文件夾的名稱可以通過外部配置文件web.xml中的context-param元素內容增加。代碼如下:

          <web-app>
          ....
          <context-param> 
              <description>Location to store uploaded file</description> 
              <param-name>file-upload</param-name> 
              <param-value>
                   c:"apache-tomcat-5.5.29"webapps"data"
               </param-value> 
          </context-param>
          ....
          </web-app>

                   以下是實現了多文件同時上傳功能的UploadServlet。在此之前您必須確定以下幾點:

          以下實例依賴F ileUpload類,所以您須將最新版的commons-fileupload.x.x.jar放到您的classpath下。可以從這里下載:http://commons.apache.org/fileupload/

          FileUpload類依賴于Commons IO包,所以您須將最新版commons-fileupload.x.x.jar放到您的classpath下。可以從這里下載:http://commons.apache.org/io/

          在測試以下例子的時候,您應該上傳小于maxFileSize的文件,否則無法上傳。

          事先確定你已經建議好文件夾:c:"tempc:"apache-tomcat-5.5.29"webapps"data

          // 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.");
             } 
          }

                 編譯并運行Servlet

              編譯以上UploadServlet并在web.xml中創建必須的實體,如下:

          <servlet>
             <servlet-name>UploadServlet</servlet-name>
             <servlet-class>UploadServlet</servlet-class>
          </servlet>
           
          <servlet-mapping>
             <servlet-name>UploadServlet</servlet-name>
             <url-pattern>/UploadServlet</url-pattern>
          </servlet-mapping>

                   現在可以嘗試使用你創建的HTML表單上傳文件。當你訪問http://localhost:8080/UploadFile.htm,瀏覽器里將會顯示如下效果,您可以從本地上傳你想要上傳的任何文件。

                   如果您的servlet腳本運行成功,您的文件上傳在c:"apache-tomcat-5.5.29"webapps"data"directory文件夾。

          posted on 2011-03-23 08:52 jack zhai 閱讀(3810) 評論(0)  編輯  收藏 所屬分類: 翻譯


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 白沙| 岑溪市| 平湖市| 陇南市| 达州市| 大安市| 澄迈县| 视频| 吉安县| 桐梓县| 通渭县| 和平区| 龙南县| 安龙县| 理塘县| 丰都县| 宜宾县| 通城县| 宝山区| 黄冈市| 营口市| 温泉县| 兴业县| 磴口县| 丰原市| 荆门市| 武乡县| 涟源市| 通榆县| 惠东县| 张掖市| 枝江市| 侯马市| 无棣县| 八宿县| 昌江| 葫芦岛市| 宁津县| 岳阳县| 孟连| 卓尼县|