`

文件上传组件

    博客分类:
  • java
阅读更多

文件上传组件
1 Apache的Commons FileUpload
2 JavaZoom的UploadBean
3 jspSmartUpload
FileUpload下载网址:
http://commons.apache.org/fileupload/
步骤:
1 导入Apache的Commons FileUpload组件的两个jar包
2 建上传页面
<form action="servlet/upload" method="post" enctype="multipart/form-data" name="form1">
  上传人:<input type="text" name="username"/><br/>
  上传文件:<input type="file" name="loadname"/><br/>
  <input type="submit"/>
</form>
注意,form中enctype="multipart/form-data"属性为上传属性,必写
---------------------------------------------------------------------
3 建立servlet处理类
public class UploadServlet extends HttpServlet {
 private ServletContext sc;//ServletContext定义了一系列方法用于与相应的servlet容器通信
 private String savePath;

 public void init(ServletConfig config) throws ServletException {
  savePath = config.getInitParameter("savePath");//得到初始化信息
  sc = config.getServletContext();//得到ServletContext接口的实例
 }

 private static final long serialVersionUID = 7093971456528100363L;

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

 public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  request.setCharacterEncoding("UTF-8");
  DiskFileItemFactory factory = new DiskFileItemFactory();
  ServletFileUpload upload = new ServletFileUpload(factory);
  try {
   List items = upload.parseRequest(request);
   for (int i = 0; i < items.size(); i++) {
    FileItem item = (FileItem) items.get(i);
    if (item.isFormField()) {
     System.out.println("表单的参数名称:" + item.getFieldName()
       + ",对应的参数值:" + item.getString("UTF-8"));
    } else {
     if (item.getName() != null && !item.getName().equals("")) {
      System.out.println("上传文件的大小:" + item.getSize());
      System.out.println("上传文件的类型:" + item.getContentType());
      System.out.println("上传文件的名称:" + item.getName());

      File temFile = new File(item.getName());
      File file = new File(sc.getRealPath("/") + savePath,
        temFile.getName());
      item.write(file);

      request.setAttribute("upload.message", "上传文件成功!");
     } else {
      request.setAttribute("upload.message", "没有上传文件成功!");
     }
    }
   }
  } catch (Exception e) {
   e.printStackTrace();
   request.setAttribute("upload.message", "没有上传文件成功!");
  }
  request.getRequestDispatcher("/uploadresult.jsp").forward(request, response);
 }
}
-----------------------------------------------------------------------------------
4 配置web.xml
<servlet>
    <servlet-name>UploadServlet</servlet-name>
    <servlet-class>com.webs.UploadServlet</servlet-class>
    <init-param>
    <param-name>savePath</param-name>
    <param-value>uploads</param-value>
    </init-param>
  </servlet>

  <servlet-mapping>
    <servlet-name>UploadServlet</servlet-name>
    <url-pattern>/servlet/upload</url-pattern>
  </servlet-mapping>


-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
Apache的commons-fileupload.jar可方便的实现文件的上传功能,本文通过实例来介绍如何使用commons-fileupload.jar。
@author:ZJ 07-2-22
Blog: http://zhangjunhd.blog.51cto.com/
    将Apache的commons-fileupload.jar放在应用程序的WEB-INF\lib下,即可使用。下面举例介绍如何使用它的文件上传功能。
所使用的fileUpload版本为1.2,环境为Eclipse3.3+MyEclipse6.0。FileUpload 是基于 Commons IO的,所以在进入项目前先确定Commons IO的jar包(本文使用commons-io-1.3.2.jar)在WEB-INF\lib下。
此文作示例工程可在文章最后的附件中下载。
示例1
最简单的例子,通过ServletFileUpload静态类来解析Request,工厂类FileItemFactory会对mulipart类的表单中的所有字段进行处理,不只是file字段。getName()得到文件名,getString()得到表单数据内容,isFormField()可判断是否为普通的表单项。
demo1.html
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=GB18030">
    <title>File upload</title>
</head>
<body>
       //必须是multipart的表单数据。
    <form name="myform" action="demo1.jsp" method="post"
       enctype="multipart/form-data">
       Your name: <br>
       <input type="text" name="name" size="15"><br>
       File:<br>
       <input type="file" name="myfile"><br>
       <br>
       <input type="submit" name="submit" value="Commit">
    </form>
</body>
</html>


demo1.jsp
<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
<%@ page import="org.apache.commons.fileupload.*"%>
<%@ page import="org.apache.commons.fileupload.servlet.*"%>
<%@ page import="org.apache.commons.fileupload.disk.*"%>
<%@ page import="java.util.*"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%
    boolean isMultipart = ServletFileUpload.isMultipartContent(request);//检查输入请求是否为multipart表单数据。
    if (isMultipart == true) {
       FileItemFactory factory = new DiskFileItemFactory();//为该请求创建一个DiskFileItemFactory对象,通过它来解析请求。执行解析后,所有的表单项目都保存在一个List中。
       ServletFileUpload upload = new ServletFileUpload(factory);
       List<FileItem> items = upload.parseRequest(request);
       Iterator<FileItem> itr = items.iterator();
       while (itr.hasNext()) {
           FileItem item = (FileItem) itr.next();
           //检查当前项目是普通表单项目还是上传文件。
           if (item.isFormField()) {//如果是普通表单项目,显示表单内容。
       String fieldName = item.getFieldName();
       if (fieldName.equals("name")) //对应demo1.html中type="text" name="name"
           out.print("the field name is" + item.getString());//显示表单内容。
       out.print("<br>");
           } else {//如果是上传文件,显示文件名。
       out.print("the upload file name is" + item.getName());
       out.print("<br>");
           }
       }
    } else {
       out.print("the enctype must be multipart/form-data");
    }
%>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=GB18030">
    <title>File upload</title>
</head>
<body>
</body>
</html>

结果:
the field name isjeff
the upload file name isD:\C语言考试样题\作业题.rar

示例2
上传两个文件到指定的目录。
demo2.html
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=GB18030">
    <title>File upload</title>
</head>
<body>
    <form name="myform" action="demo2.jsp" method="post"
       enctype="multipart/form-data">
       File1:<br>
       <input type="file" name="myfile"><br>
       File2:<br>
       <input type="file" name="myfile"><br>
       <br>
       <input type="submit" name="submit" value="Commit">
    </form>
</body>
</html>


demo2.jsp
<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
<%@ page import="org.apache.commons.fileupload.*"%>
<%@ page import="org.apache.commons.fileupload.servlet.*"%>
<%@ page import="org.apache.commons.fileupload.disk.*"%>
<%@ page import="java.util.*"%>
<%@ page import="java.io.*"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%String uploadPath="D:\\temp";
  boolean isMultipart = ServletFileUpload.isMultipartContent(request);
  if(isMultipart==true){
      try{
        FileItemFactory factory = new DiskFileItemFactory();
        ServletFileUpload upload = new ServletFileUpload(factory);
        List<FileItem> items = upload.parseRequest(request);//得到所有的文件
       Iterator<FileItem> itr = items.iterator();
        while(itr.hasNext()){//依次处理每个文件
         FileItem item=(FileItem)itr.next();
         String fileName=item.getName();//获得文件名,包括路径
         if(fileName!=null){
             File fullFile=new File(item.getName());
             File savedFile=new File(uploadPath,fullFile.getName());
             item.write(savedFile);
         }
        }
        out.print("upload succeed");
      }
      catch(Exception e){
         e.printStackTrace();
      }
  }
  else{
      out.println("the enctype must be multipart/form-data");
  }
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>File upload</title>
</head>
<body>
</body>
</html>

结果:
upload succeed

此时,在"D:\temp"下可以看到你上传的两个文件。
示例3
上传一个文件到指定的目录,并限定文件大小。
demo3.html
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=GB18030">
    <title>File upload</title>
</head>
<body>
    <form name="myform" action="demo3.jsp" method="post"
       enctype="multipart/form-data">
       File:<br>
       <input type="file" name="myfile"><br>
       <br>
       <input type="submit" name="submit" value="Commit">
    </form>
</body>
</html>


demo3.jsp
<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
<%@ page import="org.apache.commons.fileupload.*"%>
<%@ page import="org.apache.commons.fileupload.servlet.*"%>
<%@ page import="org.apache.commons.fileupload.disk.*"%>
<%@ page import="java.util.*"%>
<%@ page import="java.io.*"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%
    File uploadPath = new File("D:\\temp");//上传文件目录
    if (!uploadPath.exists()) {
       uploadPath.mkdirs();
    }
    // 临时文件目录
    File tempPathFile = new File("d:\\temp\\buffer\\");
    if (!tempPathFile.exists()) {
       tempPathFile.mkdirs();
    }
    try {
       // Create a factory for disk-based file items
       DiskFileItemFactory factory = new DiskFileItemFactory();

       // Set factory constraints
       factory.setSizeThreshold(4096); // 设置缓冲区大小,这里是4kb
       factory.setRepository(tempPathFile);//设置缓冲区目录

       // Create a new file upload handler
       ServletFileUpload upload = new ServletFileUpload(factory);

       // Set overall request size constraint
       upload.setSizeMax(4194304); // 设置最大文件尺寸,这里是4MB

       List<FileItem> items = upload.parseRequest(request);//得到所有的文件
       Iterator<FileItem> i = items.iterator();
       while (i.hasNext()) {
           FileItem fi = (FileItem) i.next();
           String fileName = fi.getName();
           if (fileName != null) {
       File fullFile = new File(fi.getName());
       File savedFile = new File(uploadPath, fullFile
              .getName());
       fi.write(savedFile);
           }
       }
       out.print("upload succeed");
    } catch (Exception e) {
       e.printStackTrace();
    }
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>File upload</title>
</head>
<body>
</body>
</html>

示例4
利用Servlet来实现文件上传。
Upload.java
package com.zj.sample;

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

@SuppressWarnings("serial")
public class Upload extends HttpServlet {
    private String uploadPath = "D:\\temp"; // 上传文件的目录
    private String tempPath = "d:\\temp\\buffer\\"; // 临时文件目录
    File tempPathFile;

    @SuppressWarnings("unchecked")
    public void doPost(HttpServletRequest request, HttpServletResponse response)
           throws IOException, ServletException {
       try {
           // Create a factory for disk-based file items
           DiskFileItemFactory factory = new DiskFileItemFactory();

           // Set factory constraints
           factory.setSizeThreshold(4096); // 设置缓冲区大小,这里是4kb
           factory.setRepository(tempPathFile);// 设置缓冲区目录

           // Create a new file upload handler
           ServletFileUpload upload = new ServletFileUpload(factory);

           // Set overall request size constraint
           upload.setSizeMax(4194304); // 设置最大文件尺寸,这里是4MB

           List<FileItem> items = upload.parseRequest(request);// 得到所有的文件
           Iterator<FileItem> i = items.iterator();
           while (i.hasNext()) {
              FileItem fi = (FileItem) i.next();
              String fileName = fi.getName();
              if (fileName != null) {
                  File fullFile = new File(fi.getName());
                  File savedFile = new File(uploadPath, fullFile.getName());
                  fi.write(savedFile);
              }
           }
           System.out.print("upload succeed");
       } catch (Exception e) {
           // 可以跳转出错页面
           e.printStackTrace();
       }
    }

    public void init() throws ServletException {
       File uploadFile = new File(uploadPath);
       if (!uploadFile.exists()) {
           uploadFile.mkdirs();
       }
       File tempPathFile = new File(tempPath);
        if (!tempPathFile.exists()) {
           tempPathFile.mkdirs();
       }
    }
}


demo4.html
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=GB18030">
    <title>File upload</title>
</head>
<body>
// action="fileupload"对应web.xml中<servlet-mapping>中<url-pattern>的设置.
    <form name="myform" action="fileupload" method="post"
       enctype="multipart/form-data">
       File:<br>
       <input type="file" name="myfile"><br>
       <br>
       <input type="submit" name="submit" value="Commit">
    </form>
</body>
</html>


web.xml
<servlet>
    <servlet-name>Upload</servlet-name>
    <servlet-class>com.zj.sample.Upload</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>Upload</servlet-name>
    <url-pattern>/fileupload</url-pattern>
</servlet-mapping>

分享到:
评论

相关推荐

    ASP文件上传组件,很好用的

    ASP文件上传组件,很好用的 Internet 连接和 Internet Explorer,可以查找和浏览 Web 上的所有信息。请直接单击下面的主题。在帮助的“目录”中可获得有关浏览 Internet 的

    ASP.NET 大文件上传组件

    ASP.NET 大文件上传组件ASP.NET 大文件上传组件

    文件上传组件的比较

    文件上传组件的比较

    多文件上传组件_Flash+ASP实现多文件上传功能

    多文件上传组件_Flash+ASP实现多文件上传功能,免费

    asp.net 多文件上传组件及实例

    asp.net 多文件上传组件及实例asp.net 多文件上传组件及实例asp.net 多文件上传组件及实例asp.net 多文件上传组件及实例

    Vuejs的文件上传组件

    Vue.js的文件上传组件

    Ajax 文件上传组件

    Ajax 文件上传组件 Ajax 文件上传组件 Ajax 文件上传组件 Ajax 文件上传组件

    JAVA文件上传组件包

    一款很好用的JAVA文件上传组件包,能够轻松实现文件的上传和下载,很好用的

    js 多文件上传 组件

    js 多文件上传 组件 很实用。类似于51.com 和qq空间相册 上传

    一个简单实用的ASP文件上传组件

    ASP文件上传组件:一个用ASP源代码将文件上传到指定的网站目录文件夹下,代码可以修改,设置上传文件的格式,大小等。

    艾恩ASP文件上传组件v9.2.09.rar

    艾恩ASP文件上传组件v9.2.09.rar艾恩ASP文件上传组件v9.2.09.rar艾恩ASP文件上传组件v9.2.09.rar艾恩ASP文件上传组件v9.2.09.rar艾恩ASP文件上传组件v9.2.09.rar艾恩ASP文件上传组件v9.2.09.rar艾恩ASP文件上传组件v...

    功能强大的文件上传组件

    Html5上传文件或者图片

    基于java的开发源码-文件上传组件 COS.zip

    基于java的开发源码-文件上传组件 COS.zip 基于java的开发源码-文件上传组件 COS.zip 基于java的开发源码-文件上传组件 COS.zip 基于java的开发源码-文件上传组件 COS.zip 基于java的开发源码-文件上传组件 COS.zip ...

    HTML5文件上传组件美化jQuery插件

    jQuery.filer是一款简单的HTML5文件上传组件美化jQuery插件。它能够完成单文件和多文件的上传,支持文件的拖拽,支持不同的文件格式校验,支持缩略图和图标等,是一款非常实用的文件上传插件。

    FLASH大文件上传组件

    FLASH大文件上传组件FLASH大文件上传组件FLASH大文件上传组件FLASH大文件上传组件

    ntsky文件上传组件

    ntsky文件上传组件ntsky文件上传组件ntsky文件上传组件ntsky文件上传组件ntsky文件上传组件ntsky文件上传组件ntsky文件上传组件

    jsf2.0 文件上传组件

    由于JSF2.0标准实现没有提供文件上传组件,而实际应用中很多时候需要上传文件,为了方便开发,我做了一个基于JSF2.0的文件上传组件,上传使用的是Apache 的commons-fileupload组件,我已经将commons-fileupload-...

    Ajax文件上传组件fineuploader.zip

    Fine Uploader 是一个采用Ajax技术实现的文件上传组件,支持拖拽文件上传。使用很简便,只需在页面中引入相应的CSS JavaScript,剩下的就只服务器端处理逻辑。在其提供的下载包中已经有多种语言实现包括:ASP.NET, ...

    文件上传组件commons-fileupload-1.2.1英文API[CHM版]

    文件上传组件commons-fileupload-1.2.1英文API[CHM版]

    拓网超大文件上传组件

    拓网大文件上传组件是基于Silverlight框架,采用多线程、断点续传技术开发的一套大文件在线上传WEB组件,是国内首个实现在线WEB断点续传的解决方案。使用本组件可以轻松将几G文件上传到服务器,良好的兼容性和通用的...

Global site tag (gtag.js) - Google Analytics