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/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(); } }