• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Apache FileUpload的两种上传方式介绍及应用
    环境
    tomcat5.6
    commmons-fileupload-1.3.jar
    commmons-io-2.4.jar
    JSP
    编码:UTF-8
    临时文件夹:fileupload/tmp相对于网站根目录
    上传文件保存位置:fileupload
    Traditional API上传方式
    //fileload01.htm
    复制代码 代码如下:

    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
    复制代码 代码如下:

    %@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);
    ListFileItem> 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
    复制代码 代码如下:

    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
    复制代码 代码如下:

    %@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上传速度相对较快。因为它是利用内存保存上传的文件,节省了传统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
    您可能感兴趣的文章:
    • jquery uploadify和apache Fileupload实现异步上传文件示例
    • Apache Commons DbUtils工具包使用介绍
    • Apache Commons fileUpload实现文件上传之一
    上一篇:jsp/javascript打印九九乘法表代码
    下一篇:实现jsp验证码的简单小例子
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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