Greedy的工作室

          posts - 23,comments - 7,trackbacks - 0
            Apachecommons-fileupload.jar可方便的實現文件的上傳功能,本文通過實例來介紹如何使用commons-fileupload.jar

          Apachecommons-fileupload.jar放在應用程序的WEB-INF\lib,即可使用。下面舉例介紹如何使用它的文件上傳功能。
                用的fileUpload版本為1.2,環境為Eclipse3.3+MyEclipse6.0FileUpload 是基于 Commons IO的,所以在進入項目前先確定Commons IO的
          jar包(本文使用commons-io-1.3.2.jar)在WEB-INF\lib下。
          示例1
          最簡單的例子,通過ServletFileUpload靜態類來解析Request,工廠類FileItemFactory會對mulipart類的表單中的所有字段進行處理,不只是file字段。getName()得到文件名,getString()得到表單數據內容,isFormField()可判斷是否為普通的表單項。

          demo1.html
          <html>
          <head>
              
          <meta http-equiv="Content-Type" content="text/html; charset=GB18030">
              
          <title>File upload</title>
          </head>
          <body>
                 //必須是multipart的表單數據。
              
          <form name="myform" action="demo1.jsp" method="post"
                 enctype
          ="multipart/form-data">
                 Your name: 
          <br>
                 
          <input type="text" name="name" size="15"><br>
                 File:
          <br>
                 
          <input type="file" name="myfile"><br>
                 
          <br>
                 
          <input type="submit" name="submit" value="Commit">
              
          </form>
          </body>
          </html>

          demo1.jsp
          <%@ page language="java" contentType="text/html; charset=GB18030"
              pageEncoding
          ="GB18030"
          %>
          <%@ page import="org.apache.commons.fileupload.*"%>
          <%@ page import="org.apache.commons.fileupload.servlet.*"%>
          <%@ page import="org.apache.commons.fileupload.disk.*"%>
          <%@ page import="java.util.*"%>
           
          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
          <%
              
          boolean isMultipart = ServletFileUpload.isMultipartContent(request);//檢查輸入請求是否為multipart表單數據。
              
          if (isMultipart == true) {
                 FileItemFactory factory 
          = new DiskFileItemFactory();//為該請求創建一個DiskFileItemFactory對象,通過它來解析請求。執行解析后,所有的表單項目都保存在一個List中。
                 ServletFileUpload upload 
          = new ServletFileUpload(factory);
                 List
          <FileItem> items = upload.parseRequest(request);
                 Iterator
          <FileItem> itr = items.iterator();
                 
          while (itr.hasNext()) {
                     FileItem item 
          = (FileItem) itr.next();
                     
          //檢查當前項目是普通表單項目還是上傳文件。
                     
          if (item.isFormField()) {//如果是普通表單項目,顯示表單內容。
                 
          String fieldName = item.getFieldName();
                 
          if (fieldName.equals("name")) //對應demo1.html中type="text" name="name"
                     out.print(
          "the field name is" + item.getString());//顯示表單內容。
                 out.print(
          "<br>");
                     } 
          else {//如果是上傳文件,顯示文件名。
                 out.print(
          "the upload file name is" + item.getName());
                 out.print(
          "<br>");
                     }
                 }
              } 
          else {
                 out.print(
          "the enctype must be multipart/form-data");
              }
          %>
          <html>
          <head>
              
          <meta http-equiv="Content-Type" content="text/html; charset=GB18030">
              
          <title>File upload</title>
          </head>
          <body>
          </body>
          </html>

          結果:
          the field name isjeff
          the upload file name isD:\C語言考試樣題\作業題.rar

          示例2
          上傳兩個文件到指定的目錄。
          demo2.html
          <html>
          <head>
              
          <meta http-equiv="Content-Type" content="text/html; charset=GB18030">
              
          <title>File upload</title>
          </head>
          <body>
              
          <form name="myform" action="demo2.jsp" method="post"
                 enctype
          ="multipart/form-data">
                 File1:
          <br>
                 
          <input type="file" name="myfile"><br>
                 File2:
          <br>
                 
          <input type="file" name="myfile"><br>
                 
          <br>
                 
          <input type="submit" name="submit" value="Commit">
              
          </form>
          </body>
          </html>

          demo2.jsp
          <%@ page language="java" contentType="text/html; charset=GB18030"
              pageEncoding
          ="GB18030"
          %>
          <%@ page import="org.apache.commons.fileupload.*"%>
          <%@ page import="org.apache.commons.fileupload.servlet.*"%>
          <%@ page import="org.apache.commons.fileupload.disk.*"%>
          <%@ page import="java.util.*"%>
          <%@ page import="java.io.*"%>
           
          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
          <%String uploadPath="D:\\temp";
            
          boolean isMultipart = ServletFileUpload.isMultipartContent(request);
            
          if(isMultipart==true){
                try{
                  FileItemFactory factory 
          = new DiskFileItemFactory();
                  ServletFileUpload upload 
          = new ServletFileUpload(factory);
                  List
          <FileItem> items = upload.parseRequest(request);//得到所有的文件
                 Iterator
          <FileItem> itr = items.iterator();
                  
          while(itr.hasNext()){//依次處理每個文件
                   FileItem item
          =(FileItem)itr.next();
                   
          String fileName=item.getName();//獲得文件名,包括路徑
                   
          if(fileName!=null){
                       File fullFile
          =new File(item.getName());
                       File savedFile
          =new File(uploadPath,fullFile.getName());
                       item.write(savedFile);
                   }
                  }
                  out.print(
          "upload succeed");
                }
                catch(Exception e){
                   e.printStackTrace();
                }
            }
            
          else{
                out.println(
          "the enctype must be multipart/form-data");
            }
          %>
          <html>
          <head>
          <meta http-equiv="Content-Type" content="text/html; charset=GB18030">
          <title>File upload</title>
          </head>
          <body>
          </body>
          </html>
          示例3
          上傳一個文件到指定的目錄,并限定文件大小。
          demo3.html
          <html>
          <head>
              
          <meta http-equiv="Content-Type" content="text/html; charset=GB18030">
              
          <title>File upload</title>
          </head>
          <body>
              
          <form name="myform" action="demo3.jsp" method="post"
                 enctype
          ="multipart/form-data">
                 File:
          <br>
                 
          <input type="file" name="myfile"><br>
                 
          <br>
                 
          <input type="submit" name="submit" value="Commit">
              
          </form>
          </body>
          </html>

          demo3.jsp
          <%@ page language="java" contentType="text/html; charset=GB18030"
              pageEncoding
          ="GB18030"
          %>
          <%@ page import="org.apache.commons.fileupload.*"%>
          <%@ page import="org.apache.commons.fileupload.servlet.*"%>
          <%@ page import="org.apache.commons.fileupload.disk.*"%>
          <%@ page import="java.util.*"%>
          <%@ page import="java.io.*"%>
           
          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
          <%
              File uploadPath 
          = new File("D:\\temp");//上傳文件目錄
              
          if (!uploadPath.exists()) {
                 uploadPath.mkdirs();
              }
              
          // 臨時文件目錄
              File tempPathFile 
          = new File("d:\\temp\\buffer\\");
              
          if (!tempPathFile.exists()) {
                 tempPathFile.mkdirs();
              }
              try {
                 
          // Create a factory for disk-based file items
                 DiskFileItemFactory factory 
          = new DiskFileItemFactory();
           
                 
          // Set factory constraints
                 factory.setSizeThreshold(
          4096); // 設置緩沖區大小,這里是4kb
                 factory.setRepository(tempPathFile);
          //設置緩沖區目錄
           
                 
          // Create a new file upload handler
                 ServletFileUpload upload 
          = new ServletFileUpload(factory);
           
                 
          // Set overall request size constraint
                 upload.setSizeMax(
          4194304); // 設置最大文件尺寸,這里是4MB
           
                 List
          <FileItem> items = upload.parseRequest(request);//得到所有的文件
                 Iterator
          <FileItem> i = items.iterator();
                 
          while (i.hasNext()) {
                     FileItem fi 
          = (FileItem) i.next();
                     
          String fileName = fi.getName();
                     
          if (fileName != null) {
                 File fullFile 
          = new File(fi.getName());
                 File savedFile 
          = new File(uploadPath, fullFile
                        .getName());
                 fi.write(savedFile);
                     }
                 }
                 out.print(
          "upload succeed");
              } catch (Exception e) {
                 e.printStackTrace();
              }
          %>
          <html>
          <head>
          <meta http-equiv="Content-Type" content="text/html; charset=GB18030">
          <title>File upload</title>
          </head>
          <body>
          </body>
          </html>
          示例4
          利用Servlet來實現文件上傳
          Upload.java
          package com.zj.sample;
           
          import java.io.File;
          import java.io.IOException;
          import java.util.Iterator;
          import java.util.List;
           
          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.disk.DiskFileItemFactory;
          import org.apache.commons.fileupload.servlet.ServletFileUpload;
           
          @SuppressWarnings(
          "serial")
          public class Upload extends HttpServlet {
              
          private String uploadPath = "D:\\temp"// 上傳文件的目錄
              private String tempPath = "d:\\temp\\buffer\\"// 臨時文件目錄
              File tempPathFile;
           
              @SuppressWarnings(
          "unchecked")
              
          public void doPost(HttpServletRequest request, HttpServletResponse response)
                     
          throws IOException, ServletException {
                 
          try {
                     
          // Create a factory for disk-based file items
                     DiskFileItemFactory factory = new DiskFileItemFactory();
           
                     
          // Set factory constraints
                     factory.setSizeThreshold(4096); // 設置緩沖區大小,這里是4kb
                     factory.setRepository(tempPathFile);// 設置緩沖區目錄
           
                     
          // Create a new file upload handler
                     ServletFileUpload upload = new ServletFileUpload(factory);
           
                     
          // Set overall request size constraint
                     upload.setSizeMax(4194304); // 設置最大文件尺寸,這里是4MB
           
                     List
          <FileItem> items = upload.parseRequest(request);// 得到所有的文件
                     Iterator<FileItem> i = items.iterator();
                     
          while (i.hasNext()) {
                        FileItem fi 
          = (FileItem) i.next();
                        String fileName 
          = fi.getName();
                        
          if (fileName != null{
                            File fullFile 
          = new File(fi.getName());
                            File savedFile 
          = new File(uploadPath, fullFile.getName());
                            fi.write(savedFile);
                        }

                     }

                     System.out.print(
          "upload succeed");
                 }
           catch (Exception e) {
                     
          // 可以跳轉出錯頁面
                     e.printStackTrace();
                 }

              }

           
              
          public void init() throws ServletException {
                 File uploadFile 
          = new File(uploadPath);
                 
          if (!uploadFile.exists()) {
                     uploadFile.mkdirs();
                 }

                 File tempPathFile 
          = new File(tempPath);
                  
          if (!tempPathFile.exists()) {
                     tempPathFile.mkdirs();
                 }

              }

          }

          demo4.html
          <html>
          <head>
              
          <meta http-equiv="Content-Type" content="text/html; charset=GB18030">
              
          <title>File upload</title>
          </head>
          <body>
          // action="fileupload"對應web.xml中
          <servlet-mapping><url-pattern>的設置.
              
          <form name="myform" action="fileupload" method="post"
                 enctype
          ="multipart/form-data">
                 File:
          <br>
                 
          <input type="file" name="myfile"><br>
                 
          <br>
                 
          <input type="submit" name="submit" value="Commit">
              
          </form>
          </body>
          </html>

          web.xml
          <servlet>
              
          <servlet-name>Upload</servlet-name>
              
          <servlet-class>com.zj.sample.Upload</servlet-class>
          </servlet>
           
          <servlet-mapping>
              
          <servlet-name>Upload</servlet-name>
              
          <url-pattern>/fileupload</url-pattern>
          </servlet-mapping>


          以上轉帖

          本文出自 “子 孑” 博客,請務必保留此出處http://zhangjunhd.blog.51cto.com/113473/18331

          link
          posted on 2008-11-06 12:11 greedy 閱讀(1444) 評論(0)  編輯  收藏

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


          網站導航:
           
          主站蜘蛛池模板: 汕头市| 临武县| 连城县| 河源市| 易门县| 白银市| 平南县| 汉阴县| 博客| 鄂尔多斯市| 彰化市| 铜陵市| 于都县| 台安县| 永德县| 汉源县| 孝感市| 阜南县| 六安市| 三河市| 开江县| 仙桃市| 栾城县| 普定县| 克东县| 任丘市| 谷城县| 革吉县| 昌平区| 陆丰市| 定结县| 若羌县| 西林县| 曲松县| 乐东| 胶州市| 弋阳县| 濉溪县| 当涂县| 泰兴市| 都昌县|