支持多文件上传
所需jar包
1. commons-FileUpload 1.2 包
2. commons-IO 1.3.1 包
3. Commons-BeanUtils 1.8 包
-----------------------------------upload.jsp-----------------------------------
<html> <head> <title>Jsp+Servlet upload file</title> </head> <body> <form action="uploadServlet" method="POST" enctype="multipart/form-data"> <input type ="file" name="file1"/><br/> <input type ="file" name="file2"/><br/> <input type="submit" value="Submit" /><br/> <input type="reset" /> </form> </body> </html>
--------------------------------------uploadServlet.java--------------------------------
package lee.util; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItemIterator; import org.apache.commons.fileupload.FileItemStream; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * <p>Title:文件上传(支持多文件上传)</p> * <p>Description>:FileUpLoad.java</p> * <p>Create Time:Nov 3, 2010 3:22:21 PM</p> * <p>@version: 5.0</p> * <p>@author: LiWeichao</p> */ public class UploadServlet extends HttpServlet { private static final Log log = LogFactory.getLog(UploadServlet.class); @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doPost(req, resp); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { String fileName="";//上传到服务器的文件名 String savePath = this.getServletContext().getRealPath("/")+"UploadFiles\\"; File saveDir = new File(savePath); if(!saveDir.isDirectory())//目录不存在则创建相应目录 saveDir.mkdir(); if (ServletFileUpload.isMultipartContent(request)) { DiskFileItemFactory dff = new DiskFileItemFactory();// 创建该对象 dff.setSizeThreshold(1024000);// 指定在内存中缓存数据大小,单位为byte ServletFileUpload sfu = new ServletFileUpload(dff);// 创建该对象 sfu.setFileSizeMax(5000000);// 指定单个上传文件的最大尺寸(单个文件大小不超过5M) sfu.setSizeMax(20000000);// 指定一次上传多个文件的总尺寸(总文件大小不超过20M) FileItemIterator fii = sfu.getItemIterator(request);// 解析request // 请求,并返回FileItemIterator集合 while (fii.hasNext()) { FileItemStream fis = fii.next();// 从集合中获得一个文件流 if (!fis.isFormField() && fis.getName().length() > 0) {// 过滤掉表单中非文件域 // 根据系统时间生成上传文件的文件名 避免重复和中文乱码 fileName = fis.getName().trim(); fileName=System.currentTimeMillis()+fileName.substring(fileName.lastIndexOf(".")); //获取文件写入流 InputStream stream=fis.openStream(); //创建输出流 OutputStream bos=new FileOutputStream(savePath+fileName); int bytesRead = 0; byte[] buffer = new byte[8192]; while ((bytesRead = stream.read(buffer, 0, 8192)) != -1){ bos.write(buffer, 0, bytesRead);//将文件写入服务器 } bos.close(); stream.close(); } } response.getWriter().println("File upload successfully!!!");// 终于成功了,还不到你的上传文件中看看,你要的东西都到齐了吗 } } catch (Exception e) { log.error("#ERROR#:上传附件发生错误,请检查!",e); e.printStackTrace(); } } }
-----------------------------------web.xml-----------------------------------
<servlet> <servlet-name>uploadServlet</servlet-name> <servlet-class>lee.util.UploadServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>uploadServlet</servlet-name> <url-pattern>/uploadServlet</url-pattern> </servlet-mapping>