Apache FileUpload的兩種上傳方式介紹及應(yīng)用_JSP教程

      編輯Tag賺U幣

      推薦:jsp/javascript打印九九乘法表代碼
      編程打印九九乘法表,本文介紹兩種實(shí)現(xiàn)方式:jsp表達(dá)式方式j(luò)avascript方式,可以根據(jù)自己的習(xí)慣隨意選擇,感興趣的朋友可以參考下哈

      環(huán)境
      tomcat5.6
      commmons-fileupload-1.3.jar
      commmons-io-2.4.jar
      JSP
      編碼:UTF-8
      臨時(shí)文件夾:fileupload/tmp相對(duì)于網(wǎng)站根目錄
      上傳文件保存位置:fileupload
      Traditional API上傳方式
      //fileload01.htm
      復(fù)制代碼 代碼如下:www.wf0088.com

      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <html>
      <body>
      <form method="POST" enctype="multipart/form-data" action="traditionalapi.jsp">
      File to upload: <input type="file" name="file" size="40"><br/>
      <input type="submit" value="Press"> to upload the file!
      </form>
      </body>
      </html>

      //traditionalapi.jsp
      復(fù)制代碼 代碼如下:www.wf0088.com

      <%@page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" language="java"%>
      <%@page import="java.io.File"%>
      <%@page import="java.util.List"%>
      <%@page import="org.apache.commons.fileupload.*"%>
      <%@page import="org.apache.commons.fileupload.disk.DiskFileItemFactory"%>
      <%@page import="org.apache.commons.fileupload.servlet.ServletFileUpload"%>
      <%
      request.setCharacterEncoding("UTF-8");
      // file less than 10kb will be store in memory, otherwise in file system.
      final int threshold = 10240;
      final File tmpDir = new File(getServletContext().getRealPath("/") + "fileupload" + File.separator + "tmp");
      final int maxRequestSize = 1024 * 1024 * 4; // 4MB
      // Check that we have a file upload request
      if(ServletFileUpload.isMultipartContent(request))
      {
      // Create a factory for disk-based file items.
      FileItemFactory factory = new DiskFileItemFactory(threshold, tmpDir);

      // Create a new file upload handler
      ServletFileUpload upload = new ServletFileUpload(factory);
      // Set overall request size constraint.
      upload.setSizeMax(maxRequestSize);
      List<FileItem> items = upload.parseRequest(request); // FileUploadException
      for(FileItem item : items)
      {
      if(item.isFormField()) //regular form field
      {
      String name = item.getFieldName();
      String value = item.getString();
      %>
      <h1><%=name%> --> <%=value%></h1>
      <%
      }
      else
      { //file upload
      String fieldName = item.getFieldName();
      String fileName = item.getName();
      File uploadedFile = new File(getServletContext().getRealPath("/") +
      "fileupload" + File.separator + fieldName + "_" + fileName);
      item.write(uploadedFile);
      %>
      <h1>upload file <%=uploadedFile.getName()%> done!</h1>
      <%
      }
      }
      }
      %>

      Streaming API上傳方式
      //fileupload02.htm
      復(fù)制代碼 代碼如下:www.wf0088.com

      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <html>
      <body>
      <form method="POST" enctype="multipart/form-data" action="streamingapi.jsp">
      File to upload: <input type="file" name="file" size="40"><br/>
      <input type="submit" value="Press"> to upload the file!
      </form>
      </body>
      </html>

      //streamingapi.jsp
      復(fù)制代碼 代碼如下:www.wf0088.com

      <%@page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" language="java"%>
      <%@page import="java.io.*"%>
      <%@page import="java.util.List"%>
      <%@page import="org.apache.commons.fileupload.*"%>
      <%@page import="org.apache.commons.fileupload.util.Streams"%>
      <%@page import="org.apache.commons.fileupload.servlet.ServletFileUpload"%>
      <%
      request.setCharacterEncoding("UTF-8");
      // Check that we have a file upload request
      if(ServletFileUpload.isMultipartContent(request))
      {
      // Create a new file upload handler
      ServletFileUpload upload = new ServletFileUpload();

      // Parse the request
      FileItemIterator iter = upload.getItemIterator(request);
      while(iter.hasNext())
      {
      FileItemStream item = iter.next();
      String fieldName = item.getFieldName();
      InputStream is = item.openStream();
      if(item.isFormField()) //regular form field
      {
      %>
      <!-- read a FileItemStream's content into a string. -->
      <h1><%=fieldName%> --> <%=Streams.asString(is)%></h1>
      <%
      }
      else
      { //file upload
      String fileName = item.getName();
      File uploadedFile = new File(getServletContext().getRealPath("/") +
      "fileupload" + File.separator + fieldName + "_" + fileName);
      OutputStream os = new FileOutputStream(uploadedFile);
      // write file to disk and close outputstream.
      Streams.copy(is, os, true);
      %>
      <h1>upload file <%=uploadedFile.getName()%> done!</h1>
      <%
      }
      }
      }
      %>

      Traditional API vs Streaming API
      Streaming API上傳速度相對(duì)較快。因?yàn)樗抢脙?nèi)存保存上傳的文件,節(jié)省了傳統(tǒng)API將文件寫入臨時(shí)文件帶來(lái)的開銷。
      可參考:
      http://stackoverflow.com/questions/11620432/apache-commons-fileupload-streaming-api
      This page describes the traditional API of the commons fileupload library. The traditional API is a convenient approach. However, for ultimate performance, you might prefer the faster Streaming API.
      http://commons.apache.org/proper/commons-fileupload/using.html

      分享:JSP分頁(yè)顯示的實(shí)例代碼
      JSP分頁(yè)顯示的實(shí)例代碼,需要的朋友可以參考一下

      來(lái)源:模板無(wú)憂//所屬分類:JSP教程/更新時(shí)間:2013-04-22
      相關(guān)JSP教程