总共:一个upload.jsp,一个FileUploadServlet.java,两个文件:ImagesUploaded,ImagesUploadTemp,

一个web.xml,两个架包:commons-fileupload-1.2.1.jar和commons-io-1.3.2.jar

下面是代码

=======================================

upload.jsp

主要代码

<form action="servlet/FileUploadServlet" method="post"
    enctype="multipart/form-data">
    <input type="file" size="30" name="test" />
    <br />
    <input name="up" type="submit" value="上传" />

</form>

FileUploadServlet.java

package com.servlet;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
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.FileUploadException;
import org.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class FileUploadServlet extends HttpServlet {

public FileUploadServlet() {
  super();
 }

public void destroy() {
  super.destroy(); // Just puts "destroy" string in log
  // Put your code here
 }

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

public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  
  String basePath = request.getScheme() + "://"
    + request.getServerName() + ":" + request.getServerPort()
    + request.getContextPath() + "/";
 
  final long MAX_SIZE = 3 * 1024 * 1024;// 设置上传文件最大为 3M
  // 允许上传的文件格式的列表
  final String[] allowedExt = new String[] { "jpg", "jpeg", "gif", "txt",
    "doc", "docx", "mp3", "wma", "m4a" ,"ppt"};
  response.setContentType("text/html");
  // 设置字符编码为UTF-8, 这样支持汉字显示
  response.setCharacterEncoding("UTF-8");

// 实例化一个硬盘文件工厂,用来配置上传组件ServletFileUpload
  DiskFileItemFactory dfif = new DiskFileItemFactory();
  dfif.setSizeThreshold(4096);// 设置上传文件时用于临时存放文件的内存大小,这里是4K.多于的部分将临时存在硬盘
  dfif.setRepository(new File(request.getRealPath("/")
    + "ImagesUploadTemp"));// 设置存放临时文件的目录,web根目录下的ImagesUploadTemp目录

// 用以上工厂实例化上传组件
  ServletFileUpload sfu = new ServletFileUpload(dfif);
  // 设置最大上传尺寸
  sfu.setSizeMax(MAX_SIZE);

PrintWriter out = response.getWriter();
  // 从request得到 所有 上传域的列表
  List fileList = null;
  try {
   fileList = sfu.parseRequest(request);
  } catch (FileUploadException e) {// 处理文件尺寸过大异常
   if (e instanceof SizeLimitExceededException) {
    out.println("文件尺寸超过规定大小:" + MAX_SIZE + "字节<p />");
    out.println("<a href=\""+request.getContextPath()+"/upload.jsp\" target=\"_top\">返回</a>");
    return;
   }
   e.printStackTrace();
  }
  // 没有文件上传
  if (fileList == null || fileList.size() == 0) {
   out.println("请选择上传文件<p />");
   out.println("<a href=\""+request.getContextPath()+"/upload.jsp\" target=\"_top\">返回</a>");
   return;
  }
  // 得到所有上传的文件
  Iterator fileItr = fileList.iterator();
  // 循环处理所有文件
  while (fileItr.hasNext()) {
   FileItem fileItem = null;
   String path = null;
   long size = 0;
   // 得到当前文件
   fileItem = (FileItem) fileItr.next();
   // 忽略简单form字段而不是上传域的文件域(<input type="text" />等)
   if (fileItem == null || fileItem.isFormField()) {
    continue;
   }
   // 得到文件的完整路径
   path = fileItem.getName();
   // 得到文件的大小
   size = fileItem.getSize();
   if ("".equals(path) || size == 0) {
    out.println("请选择上传文件<p />");
    out.println("<a href=\""+request.getContextPath()+"/upload.jsp\" target=\"_top\">返回</a>");
    return;
   }

// 得到去除路径的文件名
   String t_name = path.substring(path.lastIndexOf("\\") + 1);
   // 得到文件的扩展名(无扩展名时将得到全名)
   String t_ext = t_name.substring(t_name.lastIndexOf(".") + 1);
   // 拒绝接受规定文件格式之外的文件类型
   int allowFlag = 0;
   int allowedExtCount = allowedExt.length;
   for (; allowFlag < allowedExtCount; allowFlag++) {
    if (allowedExt[allowFlag].equals(t_ext))
     break;
   }
   if (allowFlag == allowedExtCount) {
    out.println("请上传以下类型的文件<p />");
    for (allowFlag = 0; allowFlag < allowedExtCount; allowFlag++)
     out.println("*." + allowedExt[allowFlag]
       + "&nbsp;&nbsp;&nbsp;");
    out.println("<p /><a href=\""+request.getContextPath()+"/upload.jsp\" target=\"_top\">返回</a>");
    return;
   }

long now = System.currentTimeMillis();
   // 根据系统时间生成上传后保存的文件名
   String prefix = String.valueOf(now);
   // 保存的最终文件完整路径,保存在web根目录下的ImagesUploaded目录下
   String u_name = request.getRealPath("/") + "ImagesUploaded/"
     + prefix + "." + t_ext;
   try {
    // 保存文件
    fileItem.write(new File(u_name));
    out.println("文件上传成功. 已保存为: " + prefix + "." + t_ext
      + " &nbsp;&nbsp;文件大小: " + size + "字节<p />");
    out.println("<a href=\""+request.getContextPath()+"/upload.jsp\" target=\"_top\">继续上传</a>");
   } catch (Exception e) {
    e.printStackTrace();
   }
 }

}

public void init() throws ServletException {
  // Put your code here
 }

}

 web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
 xmlns="http://java.sun.com/xml/ns/javaee
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>FileUploadServlet</servlet-name>
    <servlet-class>com.servlet.FileUploadServlet</servlet-class>
  </servlet>

<servlet-mapping>
    <servlet-name>FileUploadServlet</servlet-name>
    <url-pattern>/servlet/FileUploadServlet</url-pattern>
  </servlet-mapping>

<welcome-file-list>
    <welcome-file>upload.jsp</welcome-file>
  </welcome-file-list>
</web-app>

【转】commons-fileupload-1.2.1.jar和commons-io-1.3.2.jar实现文件上传的更多相关文章

  1. commons-fileupload.jar实现文件上传

      标签: uploadfileimportexceptionstringmyeclipse 2012-09-06 19:55 1497人阅读 评论(0) 收藏 举报  分类: 好东东(2)  Jav ...

  2. 模拟文件上传(三):使用apache fileupload组件进行文件批量上传

    其中涉及到的jar包 jsp显示层: <%@ page language="java" import="java.util.*" pageEncoding ...

  3. Java中的文件上传2(Commons FileUpload:commons-fileupload.jar)

    相比上一篇使用Servlet原始去实现的文件上传(http://www.cnblogs.com/EasonJim/p/6554669.html),使用组件去实现相对来说功能更多,省去了很多需要配置和处 ...

  4. Apache Commons fileUpload实现文件上传之一

      需要两个jar包: commons-fileupload.jar Commons IO的jar包(本文使用commons-io-2.4.jar) 利用Servlet来实现文件上传. package ...

  5. Spring MVC使用commons fileupload实现文件上传功能

    通过Maven建立Spring MVC项目,引入了Spring相关jar依赖. 1.为了使用commons fileupload组件,需要在pom.xml中添加依赖: <properties&g ...

  6. JSP 文件上传下载系列之二[Commons fileUpload]

    前言 关于JSP 文件上传的基础和原理在系列一中有介绍到. 这里介绍一个很流行的组件commons fileupload,用来加速文件上传的开发. 官方的介绍是:  让添加强壮,高性能的文件到你的se ...

  7. Apache Commons FileUpload 实现文件上传

    Commons FileUpload简介 Apache Commons是一个专注于可重用Java组件开发的 Apache 项目.Apache Commons项目由三个部分组成: 1.Commons P ...

  8. 文件上传 - Commons FileUpload介绍

    概述 FileUpload能够以多种不同的方式使用,具体取决于应用程序的要求.在最简单的情况下,调用单个方法来解析servlet请求,然后处理解析出来的Item集合.此外也可以自定义FileUploa ...

  9. Commons FileUpload文件上传组件

    Java实现的文件上传组件有好几种,其中最为“官方”的要数Apache Commons库中的FileUpload了吧. 页面 <form method="POST" enct ...

  10. Java Web文件上传原理分析(不借助开源fileupload上传jar包)

    Java Web文件上传原理分析(不借助开源fileupload上传jar包) 博客分类: Java Web   最近在面试IBM时,面试官突然问到:如果让你自己实现一个文件上传,你的代码要如何写,不 ...

随机推荐

  1. C# 静态类与非静态类、静态成员的区别分析

    静态类静态类与非静态类的重要区别在于静态类不能实例化,也就是说,不能使用 new 关键字创建静态类类型的变量.在声明一个类时使用static关键字,具有两个方面的意义:首先,它防止程序员写代码来实例化 ...

  2. JavaScript的对象——灵活与危险

    转:http://www.cnblogs.com/tolg/p/4873000.html 没有哪种数据结构比JavaScript的对象更简单灵活了.作为一个弱动态类型语言,JavaScript对对象的 ...

  3. thinkphp+redis实现秒杀功能

    好久没来整理文章了,闲了没事写篇文章记录下php+redis实现商城秒杀功能. 1,安装redis,根据自己的php版本安装对应的redis扩展(此步骤简单的描述一下) 1.1,安装 php_igbi ...

  4. java基础知识——程序员面试基础

    一.面向对象的特征有哪些? 答:①.抽象:抽象是忽略一个主题中与当前目标无关的那些方面,一边更充分的注意与当前目标有关的方面.抽象并不打算了解全面问题,而是选择其中的一部分,暂时不用部分细节.抽象包括 ...

  5. spring下配置dbcp,c3p0,proxool[转]

    不管通过何种持久化技术,都必须通过数据连接访问数据库,在Spring中,数据连接是通过数据源获得的.在以往的应用中,数据源一般是Web应用服务器提供的.在Spring中,你不但可以通过JNDI获取应用 ...

  6. S​Q​L​ ​S​e​r​v​e​r​中​​的​P​W​D​E​N​C​R​Y​P​T​与​P​W​D​C​O​M​P​A​R​E​函​数

    前幾天有個客戶的網站出問題(不是我們開發的),請我們幫他看,主要的問題是他們的網站會員在進行查詢密碼時,會員收到信的時候在密碼的欄位竟然會出現 System.Binary[] 字樣.而我進去資料庫中查 ...

  7. html5属性placeholder的js 向下兼容支持(jquery版)

    placeholder是html5表单特性中比较好用的一条,但是苦于其向下兼容性,所以一般要做向下兼容的站点都不敢用,如果有用到的地方,也是用js简单模拟而实现的,那么有没有一个一劳永逸的方法去解决这 ...

  8. LinearLayout遇到的问题——利用LinearLayout做横向滑动冲突

    问题:当我添加两个TextView的时候,然后滑动,发现只生成了一个TextView. 就是 <?xml version="1.0" encoding="utf-8 ...

  9. humble number(hd1058)

    Problem Description A number whose only prime factors are 2,3,5 or 7 is called a humble number. The ...

  10. 烧饼(nyoj779)

    描述烧饼有两面,要做好一个兰州烧饼,要两面都弄热.当然,一次只能弄一个的话,效率就太低了.有这么一个大平底锅,一次可以同时放入k个兰州烧饼,一分钟能做好一面.而现在有n个兰州烧饼,至少需要多少分钟才能 ...