`

servlet使用fileupload组件实现文件上传

阅读更多
需要的库:
http://commons.apache.org/fileupload/
http://commons.apache.org/io/

下载后解压zip 包,将commons-fileupload-1.3.x.jar和commons-io-2.x.jar 复制到t项目的WEB-INF/lib下。

文件上传的过程:
1).以multipart/form-data编码的POST请求向Servlet提交;
2).Servlet通过ServletFileUpload解析quest,并保存上传文件到temp目录;
3).再以IO方式把temp文件写到upload目录;

一、表单页面upload.jsp:
<!--如果不提供enctype会怎么样?→_→-->
<form action="UploadServlet" method="post" enctype="multipart/form-data">
  <input type="text" name="username"><br>
  <input type="file" name="file1"><br>
  <input type="file" name="file2"><br>
  <input type="submit" value="submit">
</form>


二、处理表单的Servlet—UploadServlet
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
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.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class UploadServlet extends HttpServlet
{
	@Override
	@SuppressWarnings("deprecation")
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException
	{
		//先在根目录下建两个文件
		String uploadPath = req.getRealPath("/upload");
		String tempPath = req.getRealPath("/temp");
		try
		{
			//创建一个基于硬盘的FileItem工厂
			DiskFileItemFactory factory = new DiskFileItemFactory();
			//设置向硬盘写数据时所用的缓冲区的大小,默认为2K
			factory.setSizeThreshold(10 * 1024);  
			//设置临时目录
			factory.setRepository(new File(tempPath));

			//创建一个文件上传处理器
			ServletFileUpload upload = new ServletFileUpload(factory);
			//限制上传文件大小
			upload.setSizeMax(1024 * 1024);		
			//解决文件名中文乱码
			upload.setHeaderEncoding("utf-8");  	
			
			//解析reqest
			//这一步文件已经上传到临时目录了,文件后缀为tmp
			List<FileItem> items = upload.parseRequest(req);  
			
			for (FileItem item : items)
			{			
				if (item.isFormField())
				{
					//处理普通表单域
					String fieldname = item.getFieldName();
					String value = item.getString();
					
					req.setAttribute(fieldname,value);				
				}
				else
				{
					//处理上传文件
					String filename = item.getName();  
					int index = filename.lastIndexOf("//");
					filename = filename.substring(index + 1, filename.length());
					
					if (filename.equals(""))
						return;

					File uploadFile = new File(uploadPath + "/" + filename);
	
					//简单但不够灵活
					//item.write(uploadFile);
					
					//可以自定义文件上传进度
					InputStream is = item.getInputStream();
					OutputStream os = new FileOutputStream(uploadFile);
					byte[] buff = new byte[1024];
					for (int length = 0; -1 != (length = is.read(buff));)
					{
						os.write(buff, 0, length);
					}
					
					req.setAttribute(item.getFieldName(),filename);
				}
			}
			
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
		
		req.getRequestDispatcher("uploadresult.jsp").forward(req,resp);
	}
	
}


该Servlet在Web.xml中其配置为:
<servlet>  
    <servlet-name>upload</servlet-name>  
    <servlet-class>UploadServlet</servlet-class>  
</servlet>  
  
<servlet-mapping>  
    <servlet-name>upload</servlet-name>  
    <url-pattern>/upload</url-pattern>  
 </servlet-mapping>  


结果页面uploadresult.jsp
<body>
    username:${requestScope.username }<br>
    filename1:${requestScope.file1 }<br>
    filename2:${requestScope.file2 }<br>
</body>


参考:
http://blog.csdn.net/xiaoyousifang/article/details/5651642
分享到:
评论

相关推荐

    基于commons-fileupload组件的文件上传系统

    采用apache commons 项目中的fileupload组件,实现了文件上传功能,它能够便利而简单地使得web应用程序和servlet具备高性能的文件上传能力,减小了直接操作输入输出流的系统开销。

    JEE2实现文件上传

    在 Struts 2 框架中,我们可以使用 Commons FileUpload 组件来实现文件上传。Commons FileUpload 组件可以将 HTTP 请求中的文件信息保存到临时文件夹中,然后 Struts 使用 fileUpload 拦截器将文件绑定到 Action 的...

    java实现利用HTTP基于servlet上传文件至服务器.pdf

    在 Java 中,可以使用 HTTP 协议基于 Servlet 实现文件上传。 HTTP 协议简介 HTTP(HyperText Transfer Protocol)是互联网上最常用的协议之一,用于在网络中传输数据。HTTP 协议是基于请求-响应模型的,客户端...

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

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

    commons-fileupload组件和commons-io组件

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

    servlet+jsp文件上传示例

    即可使用的servlet+jsp的文件上传。采用commons-fileupload.jar组件,简单实用!

    commons-fileupload、commons-io文件

    浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用Servlet获取上传文件的输入流然后再解析里面的请求参数是比较麻烦,所以一般选择采用apache的开源工具common-fileupload这个文件上传组件。

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

    1.FileUploadServlet.java文件,实现上传处理 import java.io.File; import java.io.IOException; import java.io.PrintWriter; import java.text.DecimalFormat; import java.util.Iterator; import java.util....

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

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

    common-fileupload

    利用commons-fileupload组件实现的java的文件的上传与下载。

    servlet文件上传

    文件上传的简单方法:(原理性的实验) 使用commons-fileupload组件实现的基本上传:

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

    新建一个servlet: FileUpload.java用于文件上传: package com.drp.util.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet....

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

    本文使用的是Apache下的著名的文件上传组件 org.apache.commons.fileupload 实现 下面结合最近看到的一些资料以及自己的尝试,先写第一篇文件上传。后续会逐步实现下载,展示文件列表,上传信息持久化等。 废话少说...

    fileupload

    Jsp+Servlet的文件上传 index.jsp ; charset=GBK"%&gt; 文件一 文件二 文件三 确定上传"&gt; upload.jsp ...

    commons-fileupload

    commons-fileupload上传组件,J2EE中JSP、Servlet所用到的文件上传组件包括commons-fileupload-1.2.1.jar和commons-io-1.3.2.jar

    JSP servlet实现文件上传下载和删除

    由于存储空间,对一般用户而言,就是用来操作存储文件的,所以这两天,特意看了一下windows下用servlet实现文件上传、下载和删除,下面是详细代码说明 上传: 用的是commons-fileupload-1.2.2.jar和commons-io-...

    java文件上传dome

    使用tomcat组件fileupload进行文件上传的小dome,有需要的拿走

    commons-fileupload-1.2.2

    Apache Commons FileUpload组件提供了一种简单而灵活的方法,可以向servlet和web应用程序添加对多部分文件上传功能的支持。commons-fileupload-1.2.2 commons-io-2.0.1

    jsf2.0上传组件(servlet3.0)

    利用JSF2.0和servlet3.0做的上传的例子,并实现单个文件上传的组件,虽然有些小限制,但是对单个上传功能完全可以实现。花了一整天的时间来研究啊,不容易!顶起吧。有什么想法请发表评论

    springMVC上传下载样例

    文件上传是项目开发中最常见的功能。为了能上传文件,必须将表单的method设置为POST,...在2003年,Apache Software Foundation发布了开源的Commons FileUpload组件,其很快成为Servlet/JSP程序员上传文件的最佳选择。

Global site tag (gtag.js) - Google Analytics