小菜毛毛技術(shù)分享

          與大家共同成長

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            164 Posts :: 141 Stories :: 94 Comments :: 0 Trackbacks
          版權(quán)聲明:原創(chuàng)作品,允許轉(zhuǎn)載,轉(zhuǎn)載時請務(wù)必以超鏈接形式標(biāo)明文章 原始出處 、作者信息和本聲明。否則將追究法律責(zé)任。http://zhangjunhd.blog.51cto.com/113473/18331
          Apachecommons-fileupload.jar可方便的實現(xiàn)文件的上傳功能,本文通過實例來介紹如何使用commons-fileupload.jar。
          @author:ZJ 07-2-22
              將Apachecommons-fileupload.jar放在應(yīng)用程序的WEB-INF"lib,即可使用。下面舉例介紹如何使用它的文件上傳功能。
          所使用的fileUpload版本為1.2,環(huán)境為Eclipse3.3+MyEclipse6.0。FileUpload 是基于 Commons IO的,所以在進(jìn)入項目前先確定Commons IOjar包(本文使用commons-io-1.3.2.jar)在WEB-INF"lib下。
          此文作示例工程可在文章最后的附件中下載。
          示例1
          最簡單的例子,通過ServletFileUpload靜態(tài)類來解析Request,工廠類FileItemFactory會對mulipart類的表單中的所有字段進(jìn)行處理,不只是file字段。getName()得到文件名,getString()得到表單數(shù)據(jù)內(nèi)容,isFormField()可判斷是否為普通的表單項。
          demo1.html
          <html>
          <head>
              <meta http-equiv="Content-Type" content="text/html; charset=GB18030">
              <title>File upload</title>
          </head>
          <body>
                 //必須是multipart的表單數(shù)據(jù)。
              <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表單數(shù)據(jù)。
              if (isMultipart == true) {
                 FileItemFactory factory = new DiskFileItemFactory();//為該請求創(chuàng)建一個DiskFileItemFactory對象,通過它來解析請求。執(zhí)行解析后,所有的表單項目都保存在一個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();
                     //檢查當(dāng)前項目是普通表單項目還是上傳文件。
                     if (item.isFormField()) {//如果是普通表單項目,顯示表單內(nèi)容。
                 String fieldName = item.getFieldName();
                 if (fieldName.equals("name")) //對應(yīng)demo1.htmltype="text" name="name"
                     out.print("the field name is" + item.getString());//顯示表單內(nèi)容。
                 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>
          結(jié)果:
          the field name isjeff
          the upload file name isD:"C語言考試樣題"作業(yè)題.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>
          結(jié)果:
          upload succeed
          此時,在"D:"temp"下可以看到你上傳的兩個文件。
          示例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); // 設(shè)置緩沖區(qū)大小,這里是4kb
                 factory.setRepository(tempPathFile);//設(shè)置緩沖區(qū)目錄
           
                 // Create a new file upload handler
                 ServletFileUpload upload = new ServletFileUpload(factory);
           
                 // Set overall request size constraint
                 upload.setSizeMax(4194304); // 設(shè)置最大文件尺寸,這里是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來實現(xiàn)文件上傳。
          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")
          publicclass Upload extends HttpServlet {
              private String uploadPath = "D:""temp"; // 上傳文件的目錄
              private String tempPath = "d:""temp""buffer"""; // 臨時文件目錄
              File tempPathFile;
           
              @SuppressWarnings("unchecked")
              publicvoid 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); // 設(shè)置緩沖區(qū)大小,這里是4kb
                     factory.setRepository(tempPathFile);// 設(shè)置緩沖區(qū)目錄
           
                     // Create a new file upload handler
                     ServletFileUpload upload = new ServletFileUpload(factory);
           
                     // Set overall request size constraint
                     upload.setSizeMax(4194304); // 設(shè)置最大文件尺寸,這里是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) {
                     // 可以跳轉(zhuǎn)出錯頁面
                     e.printStackTrace();
                 }
              }
           
              publicvoid 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"對應(yīng)web.xml<servlet-mapping><url-pattern>的設(shè)置.
              <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>

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

          本文出自 51CTO.COM技術(shù)博客

          附件下載:
            fileUpload工程
          posted on 2010-01-19 23:26 小菜毛毛 閱讀(1146) 評論(3)  編輯  收藏 所屬分類: J2EE相關(guān)技術(shù)與框架

          Feedback

          # re: Apache Commons fileUpload實現(xiàn)文件上傳 2010-01-20 01:09 小菜毛毛
          非常的有用,我自己項目中就是這樣用的  回復(fù)  更多評論
            

          # re: Apache Commons fileUpload實現(xiàn)文件上傳 2010-01-20 01:14 小菜毛毛
          這里附上需用到的JAR包,新手的話需要找半天 呵呵
          http://www.aygfsteel.com/Files/caizh2009/commons-io-1.4-bin.zip

          http://www.aygfsteel.com/Files/caizh2009/commons-fileupload-1.2.1-bin.zip
            回復(fù)  更多評論
            

          # re: Apache Commons fileUpload實現(xiàn)文件上傳 2016-06-13 23:16 未來不是夢
          good  回復(fù)  更多評論
            

          主站蜘蛛池模板: 灵璧县| 偏关县| 浦东新区| 桦南县| 镇平县| 措美县| 乃东县| 吴川市| 江城| 淮阳县| 通海县| 中阳县| 娄烦县| 永清县| 阳山县| 芦溪县| 旌德县| 万年县| 郸城县| 抚顺县| 桃园市| 永德县| 全椒县| 迁安市| 苏尼特左旗| 都兰县| 四会市| 杭锦后旗| 万山特区| 松江区| 永顺县| 桦甸市| 延津县| 怀来县| 灵璧县| 开平市| 巴塘县| 疏勒县| 黑河市| 十堰市| 广汉市|