servlet 通过 FileItem 实现多文件上传
【本文简介】
一个servlet 多文件上传的简单例子。
【依赖包】
- commons-fileupload-1.3.1.jar
- commons-io-2.2.jar
【依赖包下载】
- commons-fileupload-1.3.1.jar:http://commons.apache.org/proper/commons-fileupload/download_fileupload.cgi
- commons-io-2.2.jar:http://commons.apache.org/proper/commons-io/download_io.cgi
【文件夹结构】
【HTML表单】
1 <body> 2 <form action="UploadServlet" method="post" enctype="multipart/form-data"> 3 <input name="file" type="file" /> 4 <input name="file" type="file" /> 5 <input type="submit" value="上传"/> 6 </form> 7 </body>
【java代码】
1 package com.zjm.www.servlet; 2 3 import java.io.File; 4 import java.io.IOException; 5 import java.io.PrintWriter; 6 import java.util.Iterator; 7 8 import javax.servlet.ServletException; 9 import javax.servlet.http.HttpServlet; 10 import javax.servlet.http.HttpServletRequest; 11 import javax.servlet.http.HttpServletResponse; 12 13 import org.apache.commons.fileupload.FileItem; 14 import org.apache.commons.fileupload.FileItemFactory; 15 import org.apache.commons.fileupload.disk.DiskFileItemFactory; 16 import org.apache.commons.fileupload.servlet.ServletFileUpload; 17 18 /** 19 * @描述 servlet 通过 FileItem 实现多文件上传 20 * @作者 小M 21 * @博客 http://www.cnblogs.com/xiaoMzjm/ 22 * @时间 2014/07/30 23 */ 24 public class UploadServlet extends HttpServlet { 25 26 private static final long serialVersionUID = 1L; 27 28 public void doGet(HttpServletRequest request, HttpServletResponse response) 29 throws ServletException, IOException { 30 doPost(request, response); 31 } 32 33 @SuppressWarnings("unchecked") 34 public void doPost(HttpServletRequest request, HttpServletResponse response) 35 throws ServletException, IOException { 36 37 // 转码,建议使用过滤器转码 38 request.setCharacterEncoding("utf-8"); 39 response.setCharacterEncoding("utf-8"); 40 response.setContentType("text/html;charset=utf-8"); 41 42 // 判断提交过来的表单是否为文件上传菜单,只适用于servlet 43 boolean isMultipart = ServletFileUpload.isMultipartContent(request); 44 45 if (isMultipart) { 46 // 构造一个文件上传处理对象 47 FileItemFactory factory = new DiskFileItemFactory(); 48 ServletFileUpload upload = new ServletFileUpload(factory); 49 50 Iterator<FileItem> items; 51 52 try { 53 // 解析表单中提交的所有文件内容 54 items = upload.parseRequest(request).iterator(); 55 56 while (items.hasNext()) { 57 58 FileItem item = (FileItem) items.next(); 59 60 if (!item.isFormField()) { 61 62 // 取出上传文件的文件名称 63 String name = item.getName(); 64 65 // 取得上传文件以后的存储路径 66 String fileName = name.substring( 67 name.lastIndexOf('\\') + 1, name.length()); 68 69 // 上传文件以后的存储路径 , 有关路径问题,请参考另一篇博文:http://www.cnblogs.com/xiaoMzjm/p/3878758.html 70 String path = request.getServletContext().getRealPath("/")+"\\UpLoadFile" 71 + File.separatorChar + fileName; 72 73 // 上传文件 74 File uploaderFile = new File(path); 75 item.write(uploaderFile); 76 77 // 打印上传成功信息 78 PrintWriter out = response.getWriter(); 79 out.print("success"); 80 } 81 } 82 } catch (Exception e) { 83 e.printStackTrace(); 84 } 85 } 86 } 87 }