Jsp的文件上传

JSP文件上传,借助了Apache组织的几个插件

分别是:

commons-beanutils-1.8.3-bin.zip

commons-fileupload-1.2.1-bin.zip

commons-io-1.4-bin.zip

下载地址:

http://commons.apache.org/fileupload/

http://commons.apache.org/io/

http://commons.apache.org/beanutils/

代码是复制的别人的,多加了一些注释..myeclipse6.5 + tomcat 5.5 + jdk1.6 测试通过

 

原文 http://www.blogjava.net/lushengdi/archive/2009/01/09/227063.html

package com.dowebber.upload;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

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

import org.apache.commons.fileupload.*;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.fileupload.util.Streams;

/*******************************************************************************
 * 文件上传后台代码
 * 
 * @author [email protected]
 * @see orin http://www.blogjava.net/lushengdi/archive/2009/01/09/227063.html
 * @version 2.0 2010-06-07
 * 
 */
public class UploadServlet extends HttpServlet {
	File tmpDir = null;// 初始化上传文件的临时存放目录
	File saveDir = null;// 初始化上传文件后的保存目录

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

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setContentType("text/html;charset=UTF-8");
	/** ************************************************************* */
		/* 概要
		 *  1.创建 DiskFileItemFactory 类的对象,并设置临时文件路径(一个File对象)和缓存数据大小 
		 *  2.创建 ServletFileUpload 类的对象,并设置单个文件大小限制和总文件大小限制
		 *  3.通过 ServletFileUpload 类的getItemIterator(request)获取本次请求的文件列表迭代器对象(FileItemIterator)
		 *  4.迭代集合,并取出每个文件流,保存到指定的目录下
		 */
		
		try{
	        if(ServletFileUpload.isMultipartContent(request)){
	          DiskFileItemFactory dff = new DiskFileItemFactory();// 创建该对象
	          dff.setRepository(tmpDir);// 指定上传文件的临时目录,可省略,默认为系统临时目录
	          dff.setSizeThreshold(1024000);// 指定在内存中缓存数据大小,单位为Byte,可省略,默认无限制,1024000 = 1024000/1024/1024 MB = 0.9MB 
	          ServletFileUpload sfu = new ServletFileUpload(dff);// 创建该对象
	          sfu.setFileSizeMax(10485760);// 指定单个上传文件的最大尺寸,可省略 默认无限制,10485760 = 10MB
	          sfu.setSizeMax(10485760*5);// 指定一次上传多个文件的总尺寸,可省略,默认无限制,10485760*5 = 50MB
	          FileItemIterator fii = sfu.getItemIterator(request);// 解析request
																	// 请求,并返回FileItemIterator集合
	          while(fii.hasNext()){
	            FileItemStream fis = fii.next();// 从集合中获得一个文件流
	            if(!fis.isFormField() && fis.getName().length()>0){// 过滤掉表单中非文件域
	                String fileName = fis.getName().substring(fis.getName().lastIndexOf("\\"));// 获得上传文件的文件名
	                System.out.println("正在处理文件" + fis.getName());
	                BufferedInputStream in = new BufferedInputStream(fis.openStream());// 获得文件输入流
	                BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(new File(saveDir+fileName)));// 获得文件输出流
	                Streams.copy(in, out, true);// 开始把文件写到你指定的上传文件夹,
	                							//这个使用的是插件的util中的类,如果希望自己实现此功能,可以循环读取in流,按字节数组写入到out
	            }
	          }
	          response.getWriter().println("File upload successfully!!!");// 终于成功了,还不到你的上传文件中看看,你要的东西都到齐了吗
	        }
	    }catch(Exception e){
	        e.printStackTrace();
	    }
		
	/** ************************************************************* */	
	}

	public void init() throws ServletException {
		/*
		 * 对上传文件夹和临时文件夹进行初始化
		 */
		super.init();
		String tmpPath = "c:\\tmpdir";
		String savePath = "c:\\updir";
		tmpDir = new File(tmpPath);
		saveDir = new File(savePath);
		if (!tmpDir.isDirectory())
			tmpDir.mkdir();
		if (!saveDir.isDirectory())
			saveDir.mkdir();

	}

}

 

你可能感兴趣的:(apache,tomcat,jsp,.net,servlet)