首先,创建文件夹用来存放上传的文件,起名为upload(名称任意取);在工程中导入commons-fileupload-1.2.1和commons-io-2.4两个jar包,如下图:
然后,做一个简单的前台页面:
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>Insert title here</title> 8 </head> 9 <body> 10 <form action="${pageContext.request.contextPath }/fileUpload" method="post" enctype="multipart/form-data"> 11 <input type="text" name ="username"><br> 12 <input type="file" name="filename"><br> 13 <input type="submit" value="上传"> 14 </form> 15 </body> 16 </html>
最后,创建对应Servlet:
1 package demo; 2 3 import java.io.FileOutputStream; 4 import java.io.IOException; 5 import java.io.InputStream; 6 import java.io.OutputStream; 7 import java.util.List; 8 9 import javax.servlet.ServletException; 10 import javax.servlet.http.HttpServlet; 11 import javax.servlet.http.HttpServletRequest; 12 import javax.servlet.http.HttpServletResponse; 13 14 import org.apache.commons.fileupload.FileItem; 15 import org.apache.commons.fileupload.FileUploadException; 16 import org.apache.commons.fileupload.disk.DiskFileItemFactory; 17 import org.apache.commons.fileupload.servlet.ServletFileUpload; 18 19 public class FileUploadServlet extends HttpServlet { 20 21 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 22 request.setCharacterEncoding("UTF-8"); 23 //接收上传的文件 24 try { 25 //1.创建磁盘文件项工厂 26 DiskFileItemFactory factory = new DiskFileItemFactory(); 27 28 //2.创建文件上传核心类 29 ServletFileUpload upload = new ServletFileUpload(factory); 30 31 //3.解析request-----获得文件项集合 32 List<FileItem> parseRequest = upload.parseRequest(request); 33 34 //4.遍历文件项集合 35 for (FileItem item : parseRequest) { 36 //5.判断是普通表单项/文件上传项 37 boolean formField = item.isFormField();//true代表普通表单项,false代表文件上传项 38 if (formField) { 39 String fieldName = item.getFieldName(); 40 String fieldValue = item.getString(); 41 System.out.println(fieldName + "-----" + fieldValue); 42 }else { 43 //获得上传文件的名称 44 String fileName = item.getName(); 45 46 /* 47 * 获得上传文件的内容 48 */ 49 InputStream in = item.getInputStream(); 50 String path = this.getServletContext().getRealPath("/upload"); 51 OutputStream out = new FileOutputStream(path + "/" + fileName); 52 int len = 0; 53 byte[] buffer = new byte[1024]; 54 while((len=(in.read(buffer)))!=-1) { 55 out.write(buffer, 0, len); 56 } 57 out.close(); 58 in.close(); 59 } 60 } 61 62 } catch (FileUploadException e) { 63 e.printStackTrace(); 64 } 65 } 66 67 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 68 doGet(request, response); 69 } 70 }
启动工程,可以正常上传,上传的文件存到了tomcat/webapps中该项目下的upload文件夹中。