<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-124  評論-49  文章-56  trackbacks-0

    文件上傳組件
    1 Apache的Commons FileUpload
    2 JavaZoom的UploadBean
    3 jspSmartUpload
    FileUpload下載網址:
    http://commons.apache.org/fileupload/
    步驟:
    1 導入Apache的Commons FileUpload組件的兩個jar包
    2 建上傳頁面
    <form action="servlet/upload" method="post" enctype="multipart/form-data" name="form1">
      上傳人:<input type="text" name="username"/><br/>
      上傳文件:<input type="file" name="loadname"/><br/>
      <input type="submit"/>
    </form>
    注意,form中enctype="multipart/form-data"屬性為上傳屬性,必寫
    ---------------------------------------------------------------------
    3 建立servlet處理類
    public class UploadServlet extends HttpServlet {
     private ServletContext sc;//ServletContext定義了一系列方法用于與相應的servlet容器通信
     private String savePath;

     public void init(ServletConfig config) throws ServletException {
      savePath = config.getInitParameter("savePath");//得到初始化信息
      sc = config.getServletContext();//得到ServletContext接口的實例
     }

     private static final long serialVersionUID = 7093971456528100363L;

     public void doGet(HttpServletRequest request, HttpServletResponse response)
       throws ServletException, IOException {
      doPost(request, response);
     }

     public void doPost(HttpServletRequest request, HttpServletResponse response)
       throws ServletException, IOException {
      request.setCharacterEncoding("UTF-8");
      DiskFileItemFactory factory = new DiskFileItemFactory();
      ServletFileUpload upload = new ServletFileUpload(factory);
      try {
       List items = upload.parseRequest(request);
       for (int i = 0; i < items.size(); i++) {
        FileItem item = (FileItem) items.get(i);
        if (item.isFormField()) {
         System.out.println("表單的參數名稱:" + item.getFieldName()
           + ",對應的參數值:" + item.getString("UTF-8"));
        } else {
         if (item.getName() != null && !item.getName().equals("")) {
          System.out.println("上傳文件的大小:" + item.getSize());
          System.out.println("上傳文件的類型:" + item.getContentType());
          System.out.println("上傳文件的名稱:" + item.getName());

          File temFile = new File(item.getName());
          File file = new File(sc.getRealPath("/") + savePath,
            temFile.getName());
          item.write(file);

          request.setAttribute("upload.message", "上傳文件成功!");
         } else {
          request.setAttribute("upload.message", "沒有上傳文件成功!");
         }
        }
       }
      } catch (Exception e) {
       e.printStackTrace();
       request.setAttribute("upload.message", "沒有上傳文件成功!");
      }
      request.getRequestDispatcher("/uploadresult.jsp").forward(request, response);
     }
    }
    -----------------------------------------------------------------------------------
    4 配置web.xml
    <servlet>
        <servlet-name>UploadServlet</servlet-name>
        <servlet-class>com.webs.UploadServlet</servlet-class>
        <init-param>
        <param-name>savePath</param-name>
        <param-value>uploads</param-value>
        </init-param>
      </servlet>

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


    -----------------------------------------------------------------------------------
    -----------------------------------------------------------------------------------
    Apache的commons-fileupload.jar可方便的實現文件的上傳功能,本文通過實例來介紹如何使用commons-fileupload.jar。
    @author:ZJ 07-2-22
    Blog: http://zhangjunhd.blog.51cto.com/
        將Apache的commons-fileupload.jar放在應用程序的WEB-INF\lib下,即可使用。下面舉例介紹如何使用它的文件上傳功能。
    所使用的fileUpload版本為1.2,環境為Eclipse3.3+MyEclipse6.0。FileUpload 是基于 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>

    結果:
    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); // 設置緩沖區大小,這里是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>

    posted on 2009-11-29 21:34 junly 閱讀(390) 評論(0)  編輯  收藏 所屬分類: java
    主站蜘蛛池模板: 爱情岛论坛免费视频| 亚洲精品中文字幕乱码影院| 亚洲av成人中文无码专区| 国产人在线成免费视频| 亚洲制服丝袜精品久久| 久久久久久曰本AV免费免费| 亚洲欧洲日产国码www| 日本在线高清免费爱做网站| 亚洲成a人片在线看| 国产精品成人免费视频网站京东| 久久乐国产综合亚洲精品| 岛国片在线免费观看| 亚洲国产精品网站久久| 九九九精品成人免费视频| 亚洲国产精品无码久久九九大片 | 免费一级毛片不卡在线播放| 欧美激情综合亚洲一二区| 免费在线观看a级毛片| 美女视频黄a视频全免费网站色| 亚洲成a人片在线观看国产| 99久久婷婷免费国产综合精品| 国产亚洲精品自在久久| 在线观看成人免费视频不卡| 在线精品亚洲一区二区| 免费在线精品视频| 99在线观看视频免费| 亚洲中文字幕无码久久| 亚洲中文字幕视频国产| 59pao成国产成视频永久免费| 亚洲综合av一区二区三区| 免费人成视频在线观看视频| 黄网站免费在线观看| 中文字幕精品三区无码亚洲 | 污视频在线观看免费| 亚洲综合av一区二区三区不卡| 亚洲国产精品综合久久网络| 日韩精品无码一区二区三区免费| 亚洲男人天堂2018av| 亚洲中文字幕无码不卡电影| 国产免费AV片在线播放唯爱网| 国产男女爽爽爽免费视频|