`

Java Web上传组件使用:Commons-fileupload

阅读更多

Apache的上传组件其它已经被封装到Struts那中去了,我在网上找到了一些文章介绍它是如何上传文件的,自己跟了一下源码也写了一个上传的实例,仅供参考!

一、JSP页面如下:

<form method="POST" action="UploadServlet"
			ENCTYPE="multipart/form-data">
			<table>
				<tr><td><input type="text" name="subject" /></td></tr>
				<tr><td><input type="text" name="subject" /></td></tr>
				<tr><td><input type="file" name="file1" /></td></tr>
				<tr><td><input type="file" name="file2" /></td></tr>
				<tr><td><input type="file" name="file3" /></td></tr>
				<tr><td><input type="submit" value="上传"/></td></tr>
			</table>
		</form>
		<br />
		<a href="DownLoadServlet">下载</a>

二、上传的Servlet如下:

/**
 * Apache组件上传
 * 
 * @author mingxue.zhang@163.com
 * @date 2010-10-30
 */
public class UploadServlet extends HttpServlet {

	private static final long serialVersionUID = 5827821285414610443L;

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

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// 上传文件目录
		String uploadDir = this.getServletContext().getRealPath("/uploadDir");
		DiskFileItemFactory factory = new DiskFileItemFactory();
		// 设置内存区块大小4KB
		factory.setSizeThreshold(4 * 1024);
		// 设置暂存容器,当上传文件大于设置的内存块大小时,用暂存容器做中转
		factory.setRepository(new File(this.getServletContext().getRealPath(
				"/temp")));
		ServletFileUpload fileUpload = new ServletFileUpload(factory);
		fileUpload.setSizeMax(1024 * 1024 * 100);
		fileUpload.setFileSizeMax(1024 * 1024 * 10);
		List<FileItem> fileItemList = null;

		try {
			fileItemList = fileUpload.parseRequest(request);
		} catch (FileUploadException e) {
			e.printStackTrace();
		}
		Iterator<FileItem> fileItemIterator = fileItemList.iterator();
		FileItem fileItem = null;
		while (fileItemIterator.hasNext()) {
			fileItem = fileItemIterator.next();
			// 普通文件框上传
			if (fileItem.isFormField()) {
				String filedName = fileItem.getFieldName();
				String filedValue = fileItem.getString("GBK");// 编码格式
				System.out.println(filedName);// 文件框名称
				System.out.println(filedValue);// 文件的值
			} else {
				String filedName = fileItem.getFieldName();// 文件上传框的名称
				// 获取文件上传的文件名
				String OriginalFileName = takeOutFileName(fileItem.getName());
				System.out.println("原始文件名:"+OriginalFileName);
				if (!"".equals(OriginalFileName)) {
					// 根据上传的文件名重新命名
					String newFileName = getNewFileName(OriginalFileName);
					System.out.println("重新名:"+newFileName);
					File writeToFile = new File(uploadDir + File.separator
							+ newFileName);
					try {
						fileItem.write(writeToFile);
					} catch (Exception e) {
						e.printStackTrace();
					}
				}
			}
		}
	}

	private String takeOutFileName(String filePath) {
		String fileName = filePath;
		if (null != filePath && !"".equals(filePath)) {
			int port = filePath.lastIndexOf("\\");
			if(port != -1){
				fileName = filePath.substring(port+1);
			}
		}
		return fileName;
	}

	private String getNewFileName(String originalFileName) {
		StringBuffer newFileName = new StringBuffer();
		if (null != originalFileName && !"".equals(originalFileName)) {
			int port = originalFileName.lastIndexOf(".");
			String type = "";
			String fileName = "";
			if (port != -1) {
				type = originalFileName.substring(port + 1);
				fileName = originalFileName.substring(0, port);
			} else {
				fileName = originalFileName;
			}
			StringBuffer suffix = new StringBuffer("_");
			suffix.append(Calendar.getInstance().getTimeInMillis());
			suffix.append("_");
			suffix.append(new Random().nextInt(100));
			newFileName.append(fileName);
			newFileName.append(suffix);
			newFileName.append(".");
			newFileName.append(type);
		}
		return newFileName.toString();
	}

}

 三、下载的Servlet如下:

/**
 * Apache组件下载
 * 
 * @author mingxue.zhang@163.com
 * @date 2010-10-30
 */
public class DownLoadServlet extends HttpServlet {

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

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String filePath = "D:\\Tomcat\\apache-tomcat-6.0.26\\webapps\\ApacheUpload\\uploadDir\\";
		String fileName = "2010年10月安排2_1288447490125_56.txt";
		String Originalname = "2010年10月安排2.txt";
		response.setContentType("application/octet-stream");
		String isoFileName = new String(Originalname.getBytes("GB2312"),
				"ISO8859-1");
		response.setHeader("Content-Disposition", "attachment; filename="
				+ isoFileName);
		ServletOutputStream out = response.getOutputStream();
		BufferedOutputStream bufferOut = new BufferedOutputStream(out);
		FileInputStream inputStream = new FileInputStream(new File(filePath,
				fileName));
		BufferedInputStream bufferInput = new BufferedInputStream(inputStream);
		byte[] buffer = new byte[5 * 1024];
		int length = 0;
		while ((length = bufferInput.read(buffer)) != -1) {
			bufferOut.write(buffer, 0, length);
		}
		bufferInput.close();
		inputStream.close();
		bufferOut.close();
		out.close();
	}

}

 Servlet配置如下:

<servlet>
		<servlet-name>UploadServlet</servlet-name>
		<servlet-class>com.mengya.servlet.UploadServlet</servlet-class>
	</servlet>
	<servlet>
		<servlet-name>DownLoadServlet</servlet-name>
		<servlet-class>com.mengya.servlet.DownLoadServlet</servlet-class>
	</servlet>

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

  

1
1
分享到:
评论
1 楼 rainsilence 2010-11-07  
Commons-fileupload是很经典的编程模型

虽然大部分功能在Servlet3.0中已经有了。但是他提供了Listener接口,用于监听上传进度。

下载的那部分代码,最好不要close ServletOutputStream,而改用flush。还有,你的编码方式很可能在有些浏览器下出错。还有文件的取得方式,并不能适应于全操作系统,而且一旦在EN,JP操作上使用,也会有问题。

相关推荐

    Commons-fileupload API

    本资源为处理表单文件上传的一个开源组件( Commons-fileupload ),该...注意:使用Commons-fileupload组件实现文件上传,需要导入该组件相应的支撑jar包:Commons-fileupload和commons-io;该jar包压缩包中已包含。

    commons-fileupload-1.2.jar和commons-io-1.3.2.jar

    第1个上传组件commons-fileupload =============commons-fileupload ================ common-fileupload组件是apache的一个开源项目之一,可以从http://jakarta.apache.org/commons/fileupload/下载。该组件简单...

    commons-fileupload组件和commons-io组件

    用于servlet文件上传的组件,方便初学java web开发的人下载使用

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

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

    JAVAWeb文件上传组件

    commons-fileupload-1.3.1.jar和commons-io-2.2.jar.zip

    web项目常用jar包及说明.zip

    1.commons-fileupload.jar(commons项目中的关于文件上传的包, struts2.1.6版本后必须加入此文件) 2.commons-io.jar(commons项目(commons项目就是java中一些常用的公共的组件)的io子项目,是处理异常的) 3....

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    此外,本书的配套光盘还免费提供了价值人民币330元的java教学视频,对java语言进行了全面讲解,帮助一些不会java语言的读者快速地从java基础知识的学习中过渡到java web的学习与开发上. 第1部分 xml篇. 第1章 xml...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    此外,本书的配套光盘还免费提供了价值人民币330元的java教学视频,对java语言进行了全面讲解,帮助一些不会java语言的读者快速地从java基础知识的学习中过渡到java web的学习与开发上. 第1部分 xml篇. 第1章 xml...

    jsp上传文件(web project)

    项目用的上传组件是apache的fileupload,需要两个库文件commons-fileupload-1.2.1.jar和commons-io-1.4.jar

    web开发常用jar

    Apache Commons包中的一个,java.io.*的扩展,输入输出,支持文件上传 commons-fileupload.jar Apache Commons包中的一个,是一个通过Http接收上传的文件并处理结果文件的库 dom4j-1.4.jar 和 jaxen-1.1.1.jar ...

    Jsp文件上传下载(工具类源码)

    commons-fileupload-1.2.1实现文件上传 需导入commons-fileupload-1.2.1.jar和 commons-io-1.3.2.jar upload2.jsp &lt;%@ page language="java" import="java.util.*" pageEncoding="gb2312"%&gt; &lt;!DOCTYPE ...

    Jsp+Servlet实现文件上传下载 文件上传(一)

    文件上传和下载功能是Java Web必备技能,很实用。 本文使用的是Apache下的著名的文件上传组件 org.apache.commons.fileupload 实现 下面结合最近看到的一些资料以及自己的尝试,先写第一篇文件上传。后续会逐步实现...

    传智播客SCM手把手开发文档

    Commons-FileUpload(以及Commons-IO) 注:加*的包可使用MyEclipse自带的类库。 Web框架(跨浏览器) FckEditor 可视化编辑HTML XLoadTree 动态加载XML生成JavaScript树组件 jQuery AJAX框架-查询DOM对象,简洁,...

    基于SpringMVC+Hibernate4的考勤管理系统+.zip

    Apache fileupload 文件上传组件 Apache commons-collections 封装好的各种集合类和集合工具类 Apache commons-io Apache基金会创建并维护的Java函数库 Apache commons-logging 通用的日志接口 dom4j 优秀的JavaXML ...

    java上传下载源码

    文件上传在web应用中非常普遍,要在jsp环境中实现文件上传功能是非常容易的,因为网上有许多用java开发的文件上传组件,本文以commons-fileupload组件为例,为jsp应用添加文件上传功能。

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    此外,本书的配套光盘还免费提供了价值人民币330元的java教学视频,对java语言进行了全面讲解,帮助一些不会java语言的读者快速地从java基础知识的学习中过渡到java web的学习与开发上. 第1部分 xml篇. 第1章 xml...

    java开发常用jar包

    Apache Commons包中的一个,java.io.*的扩展,输入输出,支持文件上传 commons-fileupload.jar Apache Commons包中的一个,是一个通过Http接收上传的文件并处理结果文件的库 dom4j-1.4.jar 和 jaxen-1.1.1.jar 是一...

    java文件上传与下载

    文件上传与下载 文件上传在web应用中非常普遍,要在jsp环境中实现文件上传功能是非常容易的 ...,因为网上有许多用java开发的文件上传组件,本文以commons-fileupload组件 为例,为jsp应用添加文件上传功能。

    java实现文件上传和下载

    文件上传在web应用中非常普遍,要在jsp环境中实现文件上传功能是非常容易的,因为网上有许多用java开发的文件上传组件,本文以commons-fileupload组件为例,为jsp应用添加文件上传功能。

Global site tag (gtag.js) - Google Analytics