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

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

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

    posts - 68, comments - 19, trackbacks - 0, articles - 1

    commons-fileupload-1.2 實(shí)現(xiàn)文件上傳

    Posted on 2010-10-15 20:10 viery 閱讀(501) 評(píng)論(1)  編輯  收藏 所屬分類: JavaEE
        Google到了Apache 的 commons-fileupload-1.2.jar 上傳組件, 研究了API然后結(jié)合Hibernate實(shí)現(xiàn)了上傳圖片
    并保存到MySQL數(shù)據(jù)庫(kù). 今天重新寫了一遍, 由于不需要保存到數(shù)據(jù)庫(kù)了, 就實(shí)現(xiàn)了保存成文件格式.

        我的這個(gè)FileUpload web工程源文件下載如下 : FileUpload.rar . 解壓到當(dāng)前文件夾后直接剪切到 Tomcat 主目錄下的 webapps 
    目錄下, 啟動(dòng) Tomcat 后在瀏覽器輸入 
    http://localhost:8080/FileUpload/upload.html 查看演示.

        我是用Eclipse 開發(fā). 首先, 下載兩個(gè)開發(fā)包: commons-fileupload 和 commons-io(這個(gè)在應(yīng)用commons-fileupload時(shí)會(huì)用到).
    這兩個(gè)開發(fā)包(jar文件) 在我前面提供的FileUpload 工程下的WEB-INF/lib下可以找到, 你也可以到官方下載:
    http://commons.apache.org/downloads/download_fileupload.cgi 下載 commons-fileupload-1.2.jar
    組件包 (直接下載地址:
    http://apache.mirror.phpchina.com/commons/fileupload/binaries/commons-fileupload-1.2-bin.zip),
    http://commons.apache.org/downloads/download_io.cgi 下載 commons-io-1.3.2 組件包(直接下載地址:
     
    http://apache.mirror.phpchina.com/commons/io/binaries/commons-io-1.3.2-bin.zip). 

        啟動(dòng)Eclipse, 新建Web Project, 取名 FileUpload. 然后在WebRoot文件夾(Web根文件夾)下新建兩個(gè)文件夾(New->Folder) :
    ImagesUploaded 和 ImagesUploadTemp, 分別用來(lái)存放上傳文件和上傳時(shí)的臨時(shí)文件,稍后代碼里會(huì)用到.

         在WebRoot 文件夾下新建文件upload.html, 用來(lái)提供上傳用的form. 源代碼如下: 
         右擊src, 新建一個(gè)Servlet: FileUploadServlet, 路徑設(shè)為src/FileUploadServlet . 保存后WebRoot/WEB-INF/web.xml 更新為:

    web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5"
     xmlns="http://java.sun.com/xml/ns/javaee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
      <servlet>
        <description>This is the description of my J2EE component</description>
        <display-name>This is the display name of my J2EE component</display-name>
        <servlet-name>FileUploadServlet</servlet-name>
        <servlet-class>FileUploadServlet</servlet-class>
      </servlet>

      <servlet-mapping>
        <servlet-name>FileUploadServlet</servlet-name>
        <url-pattern>/FileUploadServlet</url-pattern>
      </servlet-mapping>
      <welcome-file-list>
        <welcome-file>upload.html</welcome-file>
      </welcome-file-list>
    </web-app>


       
        其中,我把<welcome-file-list>    <welcome-file>index.jsp</welcome-file>  </welcome-file-list> 的歡迎文件設(shè)為了upload.html,
    這樣等完成后可能直接用
    http://localhost:8080/FileUpload/ 來(lái)訪問upload.html. 不改的話, 可以在http://localhost:8080/FileUpload/upload.html
    頁(yè)面上傳文件.    在寫FileUploadServlet 之前, 先將之前下載的commons-fileupload 和commons-io 組件包壓縮文件解壓出來(lái), 把里面的
    commons-fileupload-1.2.jar (lib文件夾下) 和 commons-io-1.3.2.jar 拷到WebRoot/WEB-INF/lib 文件夾下, 以便使用它們的功能.

        FileUploadServlet.java 的源代碼如下, 附有詳細(xì)注解:
    FileUploadServlet.java

    import java.io.File;
    import java.io.IOException;
    import java.io.PrintWriter;
    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.FileUploadException;
    import org.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException;
    import org.apache.commons.fileupload.disk.DiskFileItemFactory;
    import org.apache.commons.fileupload.servlet.ServletFileUpload;

    public class FileUploadServlet extends HttpServlet {

     public FileUploadServlet() {
      super();
     }

     public void destroy() {
      super.destroy(); // Just puts "destroy" string in log
      // Put your code here
     }

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

     public void doPost(HttpServletRequest request, HttpServletResponse response)
       throws ServletException, IOException {
      final long MAX_SIZE = 3 * 1024 * 1024;// 設(shè)置上傳文件最大為 3M
      // 允許上傳的文件格式的列表
      final String[] allowedExt = new String[] { "jpg", "jpeg", "gif", "txt",
        "doc", "docx", "mp3", "wma", "m4a" };
      response.setContentType("text/html");
      // 設(shè)置字符編碼為UTF-8, 這樣支持漢字顯示
      response.setCharacterEncoding("UTF-8");

      // 實(shí)例化一個(gè)硬盤文件工廠,用來(lái)配置上傳組件ServletFileUpload
      DiskFileItemFactory dfif = new DiskFileItemFactory();
      dfif.setSizeThreshold(4096);// 設(shè)置上傳文件時(shí)用于臨時(shí)存放文件的內(nèi)存大小,這里是4K.多于的部分將臨時(shí)存在硬盤
      dfif.setRepository(new File(request.getRealPath("/")
        + "ImagesUploadTemp"));// 設(shè)置存放臨時(shí)文件的目錄,web根目錄下的ImagesUploadTemp目錄

      // 用以上工廠實(shí)例化上傳組件
      ServletFileUpload sfu = new ServletFileUpload(dfif);
      // 設(shè)置最大上傳尺寸
      sfu.setSizeMax(MAX_SIZE);

      PrintWriter out = response.getWriter();
      // 從request得到 所有 上傳域的列表
      List fileList = null;
      try {
       fileList = sfu.parseRequest(request);
      } catch (FileUploadException e) {// 處理文件尺寸過大異常
       if (e instanceof SizeLimitExceededException) {
        out.println("文件尺寸超過規(guī)定大小:" + MAX_SIZE + "字節(jié)<p />");
        out.println("<a href=\"upload.html\" target=\"_top\">返回</a>");
        return;
       }
       e.printStackTrace();
      }
      // 沒有文件上傳
      if (fileList == null || fileList.size() == 0) {
       out.println("請(qǐng)選擇上傳文件<p />");
       out.println("<a href=\"upload.html\" target=\"_top\">返回</a>");
       return;
      }
      // 得到所有上傳的文件
      Iterator fileItr = fileList.iterator();
      // 循環(huán)處理所有文件
      while (fileItr.hasNext()) {
       FileItem fileItem = null;
       String path = null;
       long size = 0;
       // 得到當(dāng)前文件
       fileItem = (FileItem) fileItr.next();
       // 忽略簡(jiǎn)單form字段而不是上傳域的文件域(<input type="text" />等)
       if (fileItem == null || fileItem.isFormField()) {
        continue;
       }
       // 得到文件的完整路徑
       path = fileItem.getName();
       // 得到文件的大小
       size = fileItem.getSize();
       if ("".equals(path) || size == 0) {
        out.println("請(qǐng)選擇上傳文件<p />");
        out.println("<a href=\"upload.html\" target=\"_top\">返回</a>");
        return;
       }

       // 得到去除路徑的文件名
       String t_name = path.substring(path.lastIndexOf("\\") + 1);
       // 得到文件的擴(kuò)展名(無(wú)擴(kuò)展名時(shí)將得到全名)
       String t_ext = t_name.substring(t_name.lastIndexOf(".") + 1);
       // 拒絕接受規(guī)定文件格式之外的文件類型
       int allowFlag = 0;
       int allowedExtCount = allowedExt.length;
       for (; allowFlag < allowedExtCount; allowFlag++) {
        if (allowedExt[allowFlag].equals(t_ext))
         break;
       }
       if (allowFlag == allowedExtCount) {
        out.println("請(qǐng)上傳以下類型的文件<p />");
        for (allowFlag = 0; allowFlag < allowedExtCount; allowFlag++)
         out.println("*." + allowedExt[allowFlag]
           + "&nbsp;&nbsp;&nbsp;");
        out.println("<p /><a href=\"upload.html\" target=\"_top\">返回</a>");
        return;
       }

       long now = System.currentTimeMillis();
       // 根據(jù)系統(tǒng)時(shí)間生成上傳后保存的文件名
       String prefix = String.valueOf(now);
       // 保存的最終文件完整路徑,保存在web根目錄下的ImagesUploaded目錄下
       String u_name = request.getRealPath("/") + "ImagesUploaded/"
         + prefix + "." + t_ext;
       try {
        // 保存文件
        fileItem.write(new File(u_name));
        out.println("文件上傳成功. 已保存為: " + prefix + "." + t_ext
          + " &nbsp;&nbsp;文件大小: " + size + "字節(jié)<p />");
        out.println("<a href=\"upload.html\" target=\"_top\">繼續(xù)上傳</a>");
       } catch (Exception e) {
        e.printStackTrace();
       }
     }

     }

     public void init() throws ServletException {
      // Put your code here
     }

    }

      

        保存后部署項(xiàng)目(MyEclipse下直接點(diǎn)擊Deploy J2EE...按鈕, 然后選擇Tomcat服務(wù)器). 沒有MyEclipse的話, 把WebRoot 拷到
    Tomcat 主目錄下的webapps 目錄下, 并重命名為 FileUpload 然后啟動(dòng)Tomcat. (或直接下載我在文章開始提供的工程打包rar文件).
    最后打開瀏覽器, 輸入url:
     
    http://localhost:8080/FileUpload/upload.html .

    Feedback

    # re: commons-fileupload-1.2 實(shí)現(xiàn)文件上傳   回復(fù)  更多評(píng)論   

    2011-03-09 10:42 by xp
    謝謝啦~
    主站蜘蛛池模板: 亚洲啪啪综合AV一区| 三级片免费观看久久| xxxx日本在线播放免费不卡| 久久影视综合亚洲| 亚洲第一网站免费视频| 在线播放亚洲第一字幕| 人人爽人人爽人人片A免费| 国产精品视_精品国产免费| a级毛片免费在线观看| 国产亚洲美女精品久久久久狼| 16女性下面无遮挡免费| 精品视频免费在线| 久久久久亚洲AV无码观看 | 又爽又黄无遮挡高清免费视频| 亚洲中文字幕乱码熟女在线| 青青草原亚洲视频| 99久久免费国产精品特黄 | 免费在线观看日韩| 最近最新高清免费中文字幕 | 91精品国产免费久久国语麻豆| 国产偷国产偷亚洲清高APP| 国产成人免费全部网站| 日韩精品无码一区二区三区免费| 亚洲第一福利视频| 6080午夜一级毛片免费看| 日韩大片在线永久免费观看网站| 亚洲日韩国产精品无码av| 久久久久亚洲av毛片大| 午夜私人影院免费体验区| 亚洲乱妇老熟女爽到高潮的片| 亚洲精品无码久久久久去q | 久久久久免费精品国产小说| 亚洲第一永久在线观看| 免费做爰猛烈吃奶摸视频在线观看| 精品免费久久久久国产一区| 亚洲AV性色在线观看| 久久精品国产亚洲AV久| 午夜亚洲国产成人不卡在线| 成人无遮挡裸免费视频在线观看 | 最近2019年免费中文字幕高清| 久青草国产免费观看|