`
sdcyst
  • 浏览: 58998 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

利用apache的FileUpload组件实现文件上传

阅读更多

利用apache的fileupload组件实现文件的上传
1、可以实现一个或多个文件的上传,也可以接收普通的form表单数据。
2、简单测试了一下,对内存的占用还是可以忍受的,而且速度也可以。偶尔会导致内存使用的上升而且不会下降,长时间后是否会降下来还没有测试。

关键点:
1、提交文件上传的form的method属性为post,enctype属性为multipart/form-data。
2、input标签需要有name属性,否则取不到内容。

看看servlet的实现,注释已经很详细了:

package org.xxm;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import dareway.org.apache.commons.fileupload.FileItem;
import dareway.org.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException;
import dareway.org.apache.commons.fileupload.disk.DiskFileItemFactory;
import dareway.org.apache.commons.fileupload.servlet.ServletFileUpload;
import dareway.org.apache.commons.fileupload.util.Streams;

/**
 * @author xuxiaoming
 * 2009-03-19
 * 以tomcat6.0为服务器
 */
public class UploadFileServlet extends HttpServlet {
	public void doGet(HttpServletRequest req,
			HttpServletResponse res) {
		return;
	}
	
	public void doPost(HttpServletRequest req,
			HttpServletResponse res) throws IOException {
		/**
		 * form中的enctype必须是multipart/...
		 * 组件提供方法检测form表单的enctype属性
		 * 在isMultipartContent方法中同时检测了是否是post提交
		 * 如果不是post提交则返回false
		 */
		if(ServletFileUpload.isMultipartContent(req)) {
			req.setCharacterEncoding("utf-8");
			DiskFileItemFactory factory = new DiskFileItemFactory();
			/**
			 * 临时文件存储路径要真实存在
			 */
			factory.setRepository(new File("../webapps/fileupload/tmp"));
			//内存最大占用
			factory.setSizeThreshold(1024000);
			ServletFileUpload sfu = new ServletFileUpload(factory);
			//单个文件最大值byte
			sfu.setFileSizeMax(102400000);
			//所有上传文件的总和最大值byte
			sfu.setSizeMax(204800000);
			List items = null;
			try {
				items = sfu.parseRequest(req);
			} catch (SizeLimitExceededException e) {
				System.out.println("size limit exception!");
			} catch(Exception e) {
				e.printStackTrace();
			}
			
			Iterator iter = items==null?null:items.iterator();
			while(iter != null && iter.hasNext()) {
				FileItem item = (FileItem)iter.next();
				//简单的表单域
				if(item.isFormField()) {
					System.out.print("form field:");
					System.out.print(item.getFieldName() + "  ");
					System.out.print(item.getString());
				} 
				//文件域
				else if(!item.isFormField()) {
					System.out.println("client name:" + item.getName());
					String fileName = item.getName().substring(item.getName().lastIndexOf("\\"));
					BufferedInputStream in = new BufferedInputStream(item.getInputStream());
					//文件存储在工程的upload目录下,这个目录也得存在
					BufferedOutputStream out = new BufferedOutputStream(
							new FileOutputStream(new File("../webapps/fileupload/upload/" + fileName)));
					Streams.copy(in, out, true);
				}
			}
		} else {
			System.out.println("enctype error!");
		}
	}
}

 

因为使用tomcat做得服务器,所以里面的路径都是以tomcat为基础来写得,具体情况需要修改。

 

附件是一个做好的例子,可以直接部署。

 

下次会以这个为基础搞一个ajax式的文件上传。

分享到:
评论
6 楼 suxiaofei 2009-07-22  
还是很不错的贴,对于第一次使用fileUpload的人会有很大帮助,至少给与一定了解
5 楼 sdcyst 2009-03-25  
sxjkk 写道

apache的fileupload组件用了MINA框架没?

不知道MINA框架,大体看了看好像没有
4 楼 sdcyst 2009-03-25  
aspserver 写道

说实话.这种代码写出来有什么意义呢?

无非就是调用人家已经封装好了的API。这种谁都会的。

建议楼主看看 源码

没有意义,就是介绍一下而已。
3 楼 aspserver 2009-03-24  
说实话.这种代码写出来有什么意义呢?

无非就是调用人家已经封装好了的API。这种谁都会的。

建议楼主看看 源码
2 楼 sunhj000java 2009-03-24  
以前用过这种方法,现在记不太清楚了,看楼主写的思路很清晰。还学了个Streams.copy(in, out, true);
1 楼 sxjkk 2009-03-23  
apache的fileupload组件用了MINA框架没?

相关推荐

    利用commons-fileupload组件实现文件上传-实例

    通过以上步骤,我们就使用Apache Commons FileUpload组件实现了一个基本的文件上传功能。你可以根据自己的需求对这个示例进行扩展,比如添加错误处理、文件类型检查和存储优化等。参考提供的博文链接,可以获取更多...

    Common-fileupload组件实现文件上传.pdf

    本篇文章将详细介绍如何利用Common-fileupload组件在JSP环境中实现文件上传功能。 #### 二、Common-fileupload组件介绍 Common-fileupload组件是由Apache开发维护的一个轻量级Java库,用于处理HTTP文件上传请求。...

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

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

    利用org.apache.commons.fileupload上传多个文件

    在使用 Apache Commons FileUpload 进行文件上传之前,你需要确保以下组件已经准备就绪: 1. **引入依赖**:首先,你需要下载并添加 `org.apache.commons.io` 和 `log4j` 的 JAR 包到你的项目类路径中。在本例中,`...

    利用Common-fileupload封装的文件上传组件...附上源码.

    首先,我们来看一下标题:“利用Common-fileupload封装的文件上传组件...附上源码”。这表明我们将讨论如何使用这个库来创建一个文件上传系统,并且提供有源码可供参考。通过`Common-fileupload`,我们可以实现用户...

    commons-fileupload文件上传实例

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

    commons-fileupload实现文件上传下载

    Commons-FileUpload 是 Apache 提供的一个用于处理 HTTP 文件上传的组件。它基于 Servlet 规范,并且能够解析来自 `multipart/form-data` 编码类型的 HTTP 请求。本文将详细介绍如何使用 Commons-FileUpload 实现...

    用fileupload组件实现的大文件上传简单实例

    在现代的Web开发中,上传文件到服务器是一项常见的需求。当上传的文件体积较大时,就涉及到一系列的...使用FileUpload组件实现的文件上传功能已经成功应用于多个项目中,证明了其在处理大文件上传时的稳定性和可靠性。

    swfupload使用org.apache.commons.fileupload 实现上传文件

    这个组件利用了Flash技术,可以在不刷新页面的情况下实现文件上传,提供了良好的用户体验。在本教程中,我们将深入探讨如何使用SwfUpload与`org.apache.commons.fileupload`库来实现文件上传功能。 Apache Commons ...

    commons-fileupload和smartupload实现文件上传

    在Java Web开发中,文件上传是一项常见的功能,Apache Commons FileUpload和Smart Upload是两个常用的文件上传组件。这里我们将深入探讨这两个库以及如何在实际项目中使用它们。 首先,Apache Commons FileUpload是...

    FileUpload上传组件

    "FileUpload上传组件"是一个专为Java Web开发者设计的强大工具,用于处理用户通过网页上传文件的需求。在JSP(JavaServer Pages)环境中,...通过合理利用这个组件,我们可以构建出功能强大且用户友好的文件上传功能。

    FileUpload组件的jar包和源码

    FileUpload组件是Apache Commons项目中的一个模块,主要处理HTTP协议中的文件上传功能。在Web开发中,用户可能需要上传图片、文档等文件,FileUpload组件提供了便捷的API,使得开发者可以轻松地处理这些复杂的文件...

    apache文件上传_apache文件上传_

    本篇文章将深入探讨Apache Commons FileUpload组件的使用,以及在Java Web环境中如何进行文件上传。 首先,Apache Commons FileUpload组件是一个专门处理HTTP请求中的多部分/形式数据(通常用于文件上传)的库。它...

    fileupload组件

    总的来说,"fileupload组件"结合Apache Commons IO和FileUpload,为Java Web开发提供了强大的文件上传解决方案。这两个库不仅提供了基本的文件操作功能,还解决了文件上传过程中的许多实际问题,简化了开发者的工作...

    FileUpload所需的两个jar包

    在Java Web开发中,文件上传是一项常见的功能,用于允许用户将本地文件传输到服务器。为了实现这个功能,开发者通常...在实际项目中,确保正确引用并合理利用这两个库,可以极大地提升文件上传功能的用户体验和稳定性。

    FileUpload.zip

    总的来说,Apache Commons IO库和其FileUpload组件是Java开发中处理文件上传的得力助手,它们提供了丰富的功能和高度的灵活性,使得文件上传操作变得简单易行。无论是在小型项目还是大型应用中,都值得我们去掌握和...

    commons-fileupload组件上传问题

    `commons-fileupload`组件是Apache Commons项目中的一个子项目,主要负责处理HTTP协议下的文件上传功能。在Web应用中,用户可能需要上传图片、文档等文件,这时`commons-fileupload`就发挥了重要作用。本篇文章将...

    java 实现大文件上传

    通过本文介绍的方法,我们可以有效地利用Apache Commons FileUpload组件实现在Java Web应用中的文件上传功能。相比于Smartupload等早期组件,Apache Commons FileUpload提供了更为强大的文件处理能力,并且拥有活跃...

Global site tag (gtag.js) - Google Analytics