Apache commons fileupload文件上传实例讲解

文件上传的方法主要目前有两个常用的,一个是SmartUpload,一个是Apache的Commons fileupload.

我们这里主要介绍下第二个的用法,首先要上传文件,注意几个问题:

  1 form表单内,要添加空间<input type="file" name="myfile">

  2 form表单的内容格式要定义成multipart/form-data格式

  3 需要类库:1 commons-io.jar 2commons-fileupload-1.3.1.jar

接下来我们看下用法。

首先阅读Apache commons fileupload的官方文档可以发现下面几个常用的函数:

1 创建文件解析对象

代码如下:

DiskFileUpload diskFileUpload = new DiskFileUpload();

2 进行文件解析后放在List中,因为这个类库支持多个文件上传,因此把结果会存在List中。

代码如下:

List<FileItem> list = diskFileUpload.parseRequest(request);

3 获取上传文件,进行分析(不是必须)

代码如下:

File remoteFile = new File(new String(fileItem.getName().getBytes(),"UTF-8"));

4 创建新对象,进行流拷贝

file1 = new File(this.getServletContext().getRealPath("attachment"),remoteFile.getName());
            file1.getParentFile().mkdirs();
            file1.createNewFile();

            InputStream ins = fileItem.getInputStream();
            OutputStream ous = new FileOutputStream(file1);

            try{
              byte[] buffer = new byte[1024];
              int len = 0;
              while((len = ins.read(buffer)) > -1)
                ous.write(buffer,0,len);
              out.println("以保存文件"+file1.getAbsolutePath()+"<br/>");
            }finally{
              ous.close();
              ins.close();
            }

这样我们就完成了文件的上传。

fileUpload.html

 <form action="servlet/UploadServlet" method="post" enctype="multipart/form-data">
    <div align="center">
      <fieldset style="width:80%">
        <legend>上传文件</legend><br/>
          <div align="left">上传文件1</div>
          <div align="left">
            <input type="file" name="file1"/>
          </div>
          <div align="left">上传文件2</div>
          <div align="left">
            <input type="file" name="file2"/>
          </div>
          <div>
            <div align='left'>上传文件说明1</div>
            <div align='left'><input type="text" name="description1"/></div>
          </div>
          <div>
            <div align='left'>上传文件说明2</div>
            <div align='left'><input type="text" name="description2"/></div>
          </div>
          <div>
            <div align='left'>
              <input type='submit' value="上传文件"/>
            </div>
          </div>
      </fieldset>
    </div>
  </form>

web.xml

<servlet>
  <servlet-name>UploadServlet</servlet-name>
  <servlet-class>com.test.hello.UploadServlet</servlet-class>
 </servlet>
<servlet-mapping>
  <servlet-name>UploadServlet</servlet-name>
  <url-pattern>/servlet/UploadServlet</url-pattern>
 </servlet-mapping>

UploadServlet.java

package com.test.hello;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
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.DiskFileUpload;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;

public class UploadServlet extends HttpServlet {

  /**
   * Constructor of the object.
   */
  public UploadServlet() {
    super();
  }

  /**
   * Destruction of the servlet. <br>
   */
  public void destroy() {
    super.destroy(); // Just puts "destroy" string in log
    // Put your code here
  }

  /**
   * The doGet method of the servlet. <br>
   *
   * This method is called when a form has its tag value method equals to get.
   *
   * @param request the request send by the client to the server
   * @param response the response send by the server to the client
   * @throws ServletException if an error occurred
   * @throws IOException if an error occurred
   */
  public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {

    response.setCharacterEncoding("UTF-8");
    response.getWriter().println("请以POST方式上传文件");
  }

  /**
   * The doPost method of the servlet. <br>
   *
   * This method is called when a form has its tag value method equals to post.
   *
   * @param request the request send by the client to the server
   * @param response the response send by the server to the client
   * @throws ServletException if an error occurred
   * @throws IOException if an error occurred
   */
  @SuppressWarnings({ "unchecked", "deprecation" })
  public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    File file1 = null,file2=null;
    String description1 = null,description2 = null;
    response.setCharacterEncoding("UTF-8");
    request.setCharacterEncoding("UTF-8");
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();

    DiskFileUpload diskFileUpload = new DiskFileUpload();
    try{
      List<FileItem> list = diskFileUpload.parseRequest(request);

      out.println("遍历所有的FileItem...<br/>");
      for(FileItem fileItem : list){
        if(fileItem.isFormField()){
          if("description1".equals(fileItem.getFieldName())){
            out.println("遍历到description1 ... <br/>");
            description1 = new String(fileItem.getString().getBytes(),"UTF-8");
          }
          if("description2".equals(fileItem.getFieldName())){
            out.println("遍历到description2 ... <br/>");
            description2 = new String(fileItem.getString().getBytes(),"UTF-8");
          }
        }else{
          if("file1".equals(fileItem.getFieldName())){
            File remoteFile = new File(new String(fileItem.getName().getBytes(),"UTF-8"));
            out.println("遍历到file1...<br/>");
            out.println("客户端文件位置:"+remoteFile.getAbsolutePath()+"<br/>");

            file1 = new File(this.getServletContext().getRealPath("attachment"),remoteFile.getName());
            file1.getParentFile().mkdirs();
            file1.createNewFile();

            InputStream ins = fileItem.getInputStream();
            OutputStream ous = new FileOutputStream(file1);

            try{
              byte[] buffer = new byte[1024];
              int len = 0;
              while((len = ins.read(buffer)) > -1)
                ous.write(buffer,0,len);
              out.println("以保存文件"+file1.getAbsolutePath()+"<br/>");
            }finally{
              ous.close();
              ins.close();
            }
          }
          if("file2".equals(fileItem.getFieldName())){
            File remoteFile = new File(new String(fileItem.getName().getBytes(),"UTF-8"));
            out.println("遍历到file2...<br/>");
            out.println("客户端文件位置:"+remoteFile.getAbsolutePath()+"<br/>");

            file2 = new File(this.getServletContext().getRealPath("attachment"),remoteFile.getName());
            file2.getParentFile().mkdirs();
            file2.createNewFile();

            InputStream ins = fileItem.getInputStream();
            OutputStream ous = new FileOutputStream(file2);

            try{
              byte[] buffer = new byte[1024];
              int len = 0;
              while((len = ins.read(buffer)) > -1)
                ous.write(buffer,0,len);
              out.println("以保存文件"+file2.getAbsolutePath()+"<br/>");
            }finally{
              ous.close();
              ins.close();
            }
          }
        }
        out.println("Request 解析完毕<br/><br/>");
      }
    }catch(FileUploadException e){}

    out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
    out.println("<HTML>");
    out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
    out.println(" <BODY>");

    if(file1 != null){
      out.println("<div>");
      out.println(" <div align='left'>file1;</div>");
      out.println(" <div align='left'><a href='"+request.getContextPath()+"/attachment/"+
          file1.getName()+"'target=_blank>"+file1.getName()+"</a>");
      out.println("</div>");
      out.println("</div>");
    }
    if(file2 != null){
      out.println("<div>");
      out.println(" <div align='left'>file2;</div>");
      out.println(" <div align='left'><a href='"+request.getContextPath()+"/attachment/"+
          file2.getName()+"'target=_blank>"+file2.getName()+"</a>");
      out.println("</div>");
      out.println("</div>");
    }
    out.println("<div>");
    out.println(" <div align='left'>description1:</div>");
    out.println(" <div align='left'>");
    out.println(description1);
    out.println("</div>");
    out.println("</div>");

    out.println("<div>");
    out.println(" <div align='left'>description2:</div>");
    out.println(" <div align='left'>");
    out.println(description2);
    out.println("</div>");
    out.println("</div>");

    out.println(" </BODY>");
    out.println("</HTML>");
    out.flush();
    out.close();
  }

  /**
   * Initialization of the servlet. <br>
   *
   * @throws ServletException if an error occurs
   */
  public void init() throws ServletException {
    // Put your code here
  }

}

运行示例

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • java组件fileupload文件上传demo

    在我们的web开发中,很多的时候都需要把本机的一些文件上传到web服务器上面去. 如:一个BBS系统,当用户使用这是系统的时候,能把本机的一些图片,文档上传到服务器上面去.然后其他用户可以去下载这些文件,那么这样的话,我们可以自己编程实现文件的上传,但是更好的方式是使用一些已有的组件帮助我们实现这种上传功能. 常用的上传组件: Apache 的 Commons FileUpload JavaZoom的UploadBean jspSmartUpload FileUpload下载地址: http:/

  • JavaEE组件commons-fileupload实现文件上传、下载

    一.文件上传概述 实现Web开发中的文件上传功能,需要两步操作: 1.在Web页面中添加上传输入项 <form action="#" method="post" enctype="multipart/form-data"> <input type="file" name="filename1"/><br> <input type="file" n

  • java使用common-fileupload实现文件上传

    文件上传是网站非常常用的功能,直接使用Servlet获取上传文件还得解析请求参数,比较麻烦,所以一般选择采用apache的开源工具,common-fileupload.这个jar包可以再apache官网上面找到,也可以在struts的lib文件夹下面找到,struts上传的功能就是基于这个实现的. common-fileupload是依赖于common-io这个包的,所以还需要下载这个包.然后导入到你的项目路径下面. 使用代码如下 package oop.hg.ytu.servlet; impo

  • Java组件commons fileupload实现文件上传功能

    Apache提供的commons-fileupload jar包实现文件上传确实很简单,最近要用Servlet/JSP做一个图片上传功能,在网上找了很多资料,大多是基于struts框架介绍的,还有些虽然也介绍common-fileupload的上传,但是那些例子比较老,有些类现在都废弃了. 通过研究学习总结,终于完成了这个上传功能,下面与大家分享一下. 案例场景 一个图书馆后台管理界面,需要提供上传图书图片的功能并且最终显示在页面中. 实现效果 进入添加书籍页面,默认显示一个图片"暂无突破&qu

  • java组件commons-fileupload文件上传示例

    文件上传在Web应用中非常普遍,要在Java Web环境中实现文件上传功能非常容易,因为网上已经有许多用Java开发的组件用于文件上传,本文以使用最普遍的commons-fileupload组件为例,演示如何为Java Web应用添加文件上传功能. commons-fileupload组件是Apache的一个开源项目之一,可以从http://commons.apache.org/fileupload/下载.该组件简单易用,可实现一次上传一个或多个文件,并可限制文件大小. 下载后解压zip包,将c

  • Apache Commons fileUpload文件上传多个示例分享

    本文通过实例来介绍如何使用commons-fileupload.jar,Apache的commons-fileupload.jar可方便的实现文件的上传功能,具体内容如下 将Apache的commons-fileupload.jar放在应用程序的WEB-INF\lib下,即可使用.下面举例介绍如何使用它的文件上传功能. 所使用的fileUpload版本为1.2,环境为Eclipse3.3+MyEclipse6.0.FileUpload 是基于 Commons IO的,所以在进入项目前先确定Com

  • java组件commons-fileupload实现文件上传、下载、在线打开

    最近做了一个文件上传.下载.与在线打开文件的功能,刚开始对文件上传的界面中含有其它表单(例如输入框.密码等)在上传的过程中遇到了许多问题,下面我写了一个同时实现文件上传.下载.在线打开文件的测试程序. 首先请看效果图: 核心代码: package com.jefry; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.net.URL; import java.u

  • JSP组件commons-fileupload实现文件上传

    本文实例为大家分享了JSP使用commons-fileupload实现文件上传代码,供大家参考,具体内容如下 1.准备: 将commons-fileupload-1.1.zip和commons-io-1.1.zip复制到"\WEB-INF\lib"目录下 2.首先是Servlet:FileUpload.java package servlet; import java.io.File; import java.io.IOException; import java.io.PrintWr

  • commons fileupload实现文件上传的实例代码

    一.文件上传的原理分析 1.文件上传的必要前提 a.表单的method必须是post b.表单的enctype属性必须是multipart/form-data类型的. enctype默认值:application/x-www-form-urlencoded 作用:告知服务器,请求正文的MIME类型 application/x-www-form-urlencoded : username=abc&password=123 ServletRequest.getParameter(String nam

  • java组件commons-fileupload实现文件上传

    一.所需要的包: 1.commons-fileupload-1.2.1.jar: 下载地址 http://commons.apache.org/downloads/download_fileupload.cgi 2.commons-io-1.4.jar: 下载地址 http://commons.apache.org/downloads/download_io.cgi 二.注意事项: form表单里面要加上enctype="multipart/form-data" 三.代码示例  1.j

随机推荐