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

1、可以实现一个或多个文件的上传,也可以接收普通的form表单数据。

2、简单测试了一下,对内存的占用还是可以忍受的,而且速度也可以。偶尔会导致内存使用的上升而且不会下降,长时间后是否会降下来还没有测试。

关键点:

1、提交文件上传的form的method属性为post,enctype属性为multipart/form-data。

2、input标签需要有name属性,否则取不到内容。

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

Java代码

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为基础来写得,具体情况需要修改。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索文件
, apache
, item
, fileupload
, import
, system
, java extfile上传数据库new
, 服务器new上传内存
, java fileupload
, servlet文件上传
, Java组件上传文件
, java实现文件上传
enctype属性
apache文件上传组件、fileupload组件、apache fileupload、fileupload上传文件、fileupload上传图片,以便于您获取更多的相关知识。

时间: 2016-02-27

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

asp 利用文件上传组件upload_5xsoft文件上传

我们是利用upload文件上传组件进行文件上传哦. <%Server.ScriptTimeOut=5000%> <!--#include file="conn.asp"--> <!--#include FILE="upload_5xsoft.inc"--> <html> <head> <title>文件上传</title> <link rel="stylesheet&

java使用smartupload组件实现文件上传的方法

 这篇文章主要介绍了java使用smartupload组件实现文件上传的方法,对比分析了使用组件与不使用组件实现文件上传的区别,具有一定参考借鉴价值,需要的朋友可以参考下 本文实例讲述了java使用smartupload组件实现文件上传的方法.分享给大家供大家参考.具体分析如下: 文件上传几乎是所有网站都具有的功能,用户可以将文件上传到服务器的指定文件夹中,也可以保存在数据库中,这里主要说明smartupload组件上传. 在讲解smartupload上传前,我们先来看看不使用组件是怎么完成上传

java组件commons-fileupload文件上传示例_java

文件上传在Web应用中非常普遍,要在Java Web环境中实现文件上传功能非常容易,因为网上已经有许多用Java开发的组件用于文件上传,本文以使用最普遍的commons-fileupload组件为例,演示如何为Java Web应用添加文件上传功能. commons-fileupload组件是Apache的一个开源项目之一,可以从http://commons.apache.org/fileupload/下载.该组件简单易用,可实现一次上传一个或多个文件,并可限制文件大小. 下载后解压zip包,将c

java使用smartupload组件实现文件上传的方法_JSP编程

本文实例讲述了java使用smartupload组件实现文件上传的方法.分享给大家供大家参考.具体分析如下: 文件上传几乎是所有网站都具有的功能,用户可以将文件上传到服务器的指定文件夹中,也可以保存在数据库中,这里主要说明smartupload组件上传. 在讲解smartupload上传前,我们先来看看不使用组件是怎么完成上传的原理的? 废话不多说直接上代码: 复制代码 代码如下: import java.io.*; import java.util.*; import javax.servle

我终于用aspSmartUpload.dll组件实现文件上传了!

上传 终于用该网站的aspSmartUpload.dll组件实现文件上传了,操作简单,我的系统是Windows98se+Pws4.0.我在该网站"资源下载-ASP源码下载-文件传输"中下载了一个资源aspsmartupload.zip,解压后,里面有例程Sample.htm.Sample.asp和组件aspSmartUpload.dll.aspSmartUploadUtil.dll,操作很简单. 第一步:注册组件,把aspSmartUpload.dll和aspSmartUploadUt

利用label标签和CSS美化文件上传表单

文件上传类型表单<input type="file" />是一个让很多前端开发者纠结过的表单类型,因为它是一个无法单纯用CSS给它定义兼容的样式.上周的工作中有个批量上传图片的页面,又遇到了这个问题,于是,今天把我的解决方案奉献给大家:利用label标签与CSS共同打造一个样式可控的并兼容IE6之外主流浏览器的上传表单. 实现思路通俗易懂: 首先,我们要新增一个与file相册大小的button按钮,然后利用label为初始的file类型表单定义标注(关于label的解释与用

JSP利用组件实现文件上传的全攻略

js|攻略|上传 一.首先下载jspsmartupload组件 http://dboy520.51.net/cgi-bin/newjavajia/downcount.php?id=22 (本站地址) http://www.jspsmart.com 二.将目录jspsmartupload/wib_inf/classes中的内容拷贝到网站所在的实际目录中的WEB-INF中(resin是这个目录,其他的可能是classes,具体请查阅jspsmartupload/help/setup.htm) 三.如

asp利用文件上传组件实现文件上传

<style>body,form,fieldset,input,textarea{margin:0;padding:0;}body{background:#f2f2f2;height:100%;font:12px tahoma,arial;color:#333;text-align:center;}</style> <body> <form name="form" method="post" action="upl

.Net中FileUpload控件文件上传与验证实用例子

最简单的fileupload控件上传图片例子  代码如下 复制代码 using System.IO; protected void Button1_Click(object sender, EventArgs e) { Boolean fileOk = false; //指定文件路径,pic是项目下的一个文件夹:-表示当前网页所在的文件夹 String path = Server.MapPath("~/");//物理文件路径 //文件上传控件中如果已经包含文件 if (FileUplo