`

利用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、jsp代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>upload</title>
</head>
<body>
<form action="uploadServlet" method="post" enctype="multipart/form-data">
	<table>
	<caption>上传实例</caption>
		<tr>
			<td>姓名</td>
			<td>
				<input type="text" name="name">
			</td>
		</tr>
		<tr>
			<td>年龄</td>
			<td>
				<input type="text" name="age">
			</td>
		</tr>
		<tr>
			<td>照片</td>
			<td>
				<input type="file" name="image">
			</td>
		</tr>
		<tr>
			<td></td>
			<td>
				<input type="submit" value="提交">
			</td>
		</tr>
	</table>
</form>
</body>
</html>

 

2、UploadServlet代码

package servlet;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.Writer;
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;
import org.apache.commons.fileupload.util.Streams;

/**
 * 上传servlet
 * @author lisanlai
 *
 */
public class UploadServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    public UploadServlet() {
        super();
    }

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

	@SuppressWarnings("unchecked")
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		response.setContentType("text/html");   
        // 设置字符编码为UTF-8, 这样支持汉字显示   
        response.setCharacterEncoding("UTF-8");
        Writer o = response.getWriter();
		
		/**
		 * 首先判断form的enctype是不是multipart/form-data
		 * 同时也判断了form的提交方式是不是post
		 * 方法:isMultipartContent(request)
		 */
	
		if(ServletFileUpload.isMultipartContent(request)){
			request.setCharacterEncoding("utf-8");
			
			// 实例化一个硬盘文件工厂,用来配置上传组件ServletFileUpload   
			DiskFileItemFactory factory =  new DiskFileItemFactory();
			
			//设置文件存放的临时文件夹,这个文件夹要真实存在
			File fileDir = new File("../webapps/fileupload/tmp/");
			if(fileDir.isDirectory() && fileDir.exists()==false){
				fileDir.mkdir();
			}
			factory.setRepository(fileDir);
			
			//设置最大占用的内存
			factory.setSizeThreshold(1024000);
			
			//创建ServletFileUpload对象
			ServletFileUpload sfu = new ServletFileUpload(factory);
			sfu.setHeaderEncoding("utf-8");
			
			//设置单个文件最大值byte 
			sfu.setFileSizeMax(102400000);
			
			//所有上传文件的总和最大值byte   
			sfu.setSizeMax(204800000);
			
			List<FileItem> items =  null;
			
			try {
				items = sfu.parseRequest(request);
			}catch (SizeLimitExceededException e) {   
                System.out.println("文件大小超过了最大值");   
            } catch(FileUploadException e) {   
                e.printStackTrace();   
            } 
            
            //取得items的迭代器
            Iterator<FileItem> iter = items==null?null:items.iterator();
            
            //图片上传后存放的路径目录
            File images = new File("D:/upload/images/");
			if(images.exists()==false){
				images.mkdirs();
			}
            //迭代items
            while(iter!=null && iter.hasNext()){
            	FileItem item = (FileItem) iter.next();
            	
            	//如果传过来的是普通的表单域
            	if(item.isFormField()){
            		System.out.print("普通的表单域:");   
                    System.out.print(new String(item.getFieldName()) + "  ");   
                    System.out.println(new String(item.getString("UTF-8")));   
            	}
            	//文件域
            	else if(!item.isFormField()){
            		System.out.println("源图片:" + item.getName());   
            		String fileName = item.getName().substring(item.getName().lastIndexOf("\\"));
            		BufferedInputStream in = new BufferedInputStream(item.getInputStream());
            		//文件存储在D:/upload/images目录下,这个目录也得存在 
                    BufferedOutputStream out = new BufferedOutputStream(   
                            new FileOutputStream(new File(images.getAbsolutePath()+ fileName))); 
                    Streams.copy(in, out, true);   
                    o.write("文件上传成功");
            	}
            }
		}else {   
            System.out.println("表单的enctype 类型错误");   
        } 
	}

}

 

3、web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>UploadTest</display-name>
  <welcome-file-list>
    <welcome-file>upload.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <description></description>
    <display-name>UploadServlet</display-name>
    <servlet-name>UploadServlet</servlet-name>
    <servlet-class>servlet.UploadServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>UploadServlet</servlet-name>
    <url-pattern>/uploadServlet</url-pattern>
  </servlet-mapping>
</web-app>

 

分享到:
评论
1 楼 zhang90522 2013-11-15  
谢谢了  代码可以使用 详细研究下

相关推荐

    commons-fileupload-1.3.3.jar commons-io-2.5.jar

    使用这两个库来实现文件上传功能的基本步骤如下: 1. **配置Servlet容器**:首先,你需要确保你的Servlet容器(如Tomcat、Jetty)已经配置了对multipart/form-data请求的支持。这通常涉及到在web.xml文件中配置一个...

    commons-fileUpload组件

    描述中提到"jsp上传组件包含commons-fileupload.jar和commons-io.jar",这意味着在JSP(JavaServer Pages)环境中,为了实现文件上传功能,开发者通常会引用这两个JAR文件。Apache Commons FileUpload处理文件上传的...

    commons-fileupload-1.0上传组件使用实例.

    接下来我们将根据提供的代码示例来详细了解如何使用`commons-fileupload`实现文件上传功能。 1. **前端表单设计**: - 创建一个HTML表单,用于收集用户上传的文件。 - 表单的`method`属性设置为`POST`,`enctype`...

    commons-fileupload-1.3.3-bin

    5. **多文件上传**:Apache Commons FileUpload支持单个文件和多个文件的上传,可以通过`&lt;input type="file" multiple&gt;`在HTML表单中实现。 在压缩包中,除了`commons-fileupload-1.3.3-bin`外,还包含了一个`...

    commons-fileupload文件上传实例

    本教程将详细介绍如何利用commons-fileupload实现文件上传功能,并提供一个简单的实例。 **一、Apache Commons FileUpload简介** Apache Commons FileUpload是Apache软件基金会开发的一个开源组件,专门处理HTTP...

    commons-fileupload-1.3.1.jar

    "commons-fileupload-1.3.1.jar" 是Apache Commons FileUpload项目的版本1.3.1的Java档案文件,这个库专门设计用于处理HTTP协议中的文件上传功能。在Web开发中,尤其是基于Java的服务器端应用程序,文件上传是常见的...

    commons-fileupload-1.3.2.jar

    总之,Apache Commons FileUpload是Java Web开发中处理文件上传不可或缺的工具,它提供了高效、灵活且安全的文件上传解决方案。通过理解和熟练运用这个库,开发者可以轻松地在自己的应用中实现复杂的文件上传功能。

    基于commons-fileupload组件的上传下载

    以下将详细介绍如何使用commons-fileupload组件实现文件上传和下载。 首先,你需要在项目中引入必要的依赖库。如【描述】中所述,需要导入`javacommons-fileupload-1.2.1.jar`和`commons-io-1.4.jar`两个文件,这两...

    commons-fileupload-1.4-bin.zip

    《Apache Commons FileUpload组件详解》 Apache Commons FileUpload是一个用于处理HTTP请求中多部分数据的Java库,尤其在上传文件时极为有用。标题中的"commons-fileupload-1.4-bin.zip"表明这是一个包含Apache ...

    使用commons-fileupload上传文件

    通过使用`commons-fileupload`,开发者可以方便地在Java Web应用中实现文件上传功能,而无需关注底层的HTTP协议细节。这个组件提供了丰富的API,支持各种自定义选项,例如内存阈值、临时文件存储位置等,使得文件...

    利用commons-fileupload上传组件上传文件(一)

    在本文中,我们将深入探讨如何使用Apache Commons FileUpload组件来实现文件上传功能。Apache Commons FileUpload是一个用于处理HTTP请求中的多部分数据的Java库,它使得在Servlet或JSP应用中处理文件上传变得简单易...

    commons-fileupload-1.4 jar包.rar

    Apache Commons FileUpload组件就是为了解决这一问题而设计的,它提供了一套完整的解决方案,使得开发者可以方便、高效地处理HTTP请求中的多部分数据,即文件上传。本篇文章将深入解析这个组件,帮助开发者更好地...

    commons-fileupload组件上传问题

    在IT行业中,文件上传是Web应用中常见的功能之一,Apache Commons FileUpload组件是Java领域处理文件上传的标准库。本文将详细解析"commons-fileupload组件上传问题",并结合提供的资源来探讨如何解决这类问题。 ...

    java 上传 SmartUpload&commons-fileupload

    本主题将深入探讨两种常见的Java上传组件——SmartUpload和Commons-Fileupload。 SmartUpload是一个强大的Java上传组件,由Julien DROUET开发,它为JSP和Servlet提供了方便的文件上传功能。SmartUpload提供了一套...

    commons-fileupload文件上传实例代码

    本教程将深入讲解如何使用`commons-fileupload`库处理中文乱码问题以及实现多文件上传。 首先,`commons-fileupload`是Apache Commons项目的一个组件,专门用于处理HTTP请求中的多部分数据,即文件上传。它与...

    commons-fileupload-1.3.1.jar=DiskFileItemFactory等上传下载jar包

    Apache Commons FileUpload的核心组件之一是`DiskFileItemFactory`,这是文件项工厂类,负责创建`FileItem`对象。`FileItem`对象代表了HTTP请求中的一个字段,无论是普通文本还是上传的文件。`DiskFileItemFactory`...

    commons-fileupload-1.2.1.jar和commons-io-1.4.jar

    标题中的"commons-fileupload-1.2.1.jar"和"commons-io-1.4.jar"是两个在Java开发中非常重要的库文件,主要用于处理文件上传功能。它们都是Apache Commons项目的一部分,Apache Commons是一个致力于提供可重用Java...

    commons-fileupload-1.2.1.rar源文件及jar文件

    2. **版本1.2.1**:这是一个特定的版本号,表明这是FileUpload组件的第1.2.1次更新。每个版本通常会修复前一版本的错误,增加新特性,或者优化性能。 3. **源文件**:`commons-fileupload-1.2.1-src.zip`包含的是...

Global site tag (gtag.js) - Google Analytics