总共:一个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. autoresizing代码实现

    主要解决父子控件之间的布局关系: /*     Flexible 灵活的,自由的          typedef NS_OPTIONS(NSUInteger, UIViewAutoresizing) ...

  2. 2015.4.8-C#入门基础(二)

    初来乍道,下面分享一下,自己做的小程序 主要用到 数组,类型转换,枚举,循环: 主要体现的是: 输入姓名,就可以查看其性格 using System;using System.Collections. ...

  3. python列表推导和字典推导

    代码如下: list = ['aaa','bbb','ccc','ddd'] dict = {key:value for value,key in enumerate(list)} print(dic ...

  4. Change the ball--hdu2277

    Change the ball Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  5. USB device & USB controller & USB passthrough

    目录 USB device USB controller Linux 相关命令 Python 相关库 Libvirt USB passthrough 参考资料 近期往 openstack 里倒腾 US ...

  6. LINUX USB MASS STORAGE DRIVER流程图

  7. Delphi在Webbrowser上绘制图像

    unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...

  8. Unix/Linux环境C编程入门教程(29) 内存操作那些事儿

    函数介绍 memccpy(拷贝内存内容) 相关函数 bcopy,memcpy,memmove,strcpy,strncpy 表头文件 #include<string.h> 定义函数 voi ...

  9. 杭电oj 3079 Vowel Counting

    Tips:可以先将输入的字符串全部转化为小写字母,然后再将元音字母变为大写,时间复杂度O(n) #include<stdio.h> #include<string.h> #in ...

  10. TestWriter自动化测试介绍

    简介: TestWriter是上海博为峰结合多年为企业做测试服务的经验所研发的一款具有自主知识产权的自动化测试工具,为企业用户提供真正的低成本.高效率的自动化测试,引领软件测试自动化运用由技术层面向业 ...