源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

Apache FileUpload的两种上传方式介绍及应用

  • 时间:2020-01-22 06:56 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Apache FileUpload的两种上传方式介绍及应用
[b]环境[/b]: tomcat5.6 commmons-fileupload-1.3.jar commmons-io-2.4.jar JSP 编码:UTF-8 临时文件夹:fileupload/tmp相对于网站根目录 上传文件保存位置:fileupload [b]Traditional API上传方式[/b] //fileload01.htm
[u]复制代码[/u] 代码如下:
<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
[u]复制代码[/u] 代码如下:
<%@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> <% } } } %>
[b]Streaming API上传方式[/b] //fileupload02.htm
[u]复制代码[/u] 代码如下:
<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
[u]复制代码[/u] 代码如下:
<%@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> <% } } } %>
[b]Traditional API vs Streaming API[/b] Streaming API上传速度相对较快。因为它是利用内存保存上传的文件,节省了传统API将文件写入临时文件带来的开销。 可参考: 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
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部