一、jsp中:
1 <body> 2 <!-- 注意: 1. type="file"; 2.method="post" ; 3.enctype="multipart/form-data" --> 3 <form action="UploadServlet" method="post" enctype="multipart/form-data"> 4 雇員編號:<input type="text" name="empno"/><br/><br/> 5 雇員姓名:<input type="text" name="ename"/><br/><br/> 6 所在部門: 7 <select name="deptno"> 8 <option value="10">銷售部</option> 9 <option value="20">IT部</option> 10 <option value="30">人力部</option> 11 </select><br/><br/> 12 驗證碼:<input type="text" name="code"><img id="code" alt="請刷新" src="validateCodeServlet" onclick="changeCode()" style="cursor:hand;"><a href="javascript:changeCode()">換一張</a><br/><br/> 13 14 15 頭像:<input type="file" name="uploadFile"> 16 <img src="${image_path}" title="${image_name}" width="200" height="200"> 17 <br/><br/> 18 19 <input type="reset" value="重置"/> 20 <input type="submit" value="注冊"/> 21 </form> 22 </body> 23 </html>
二、導入工具包

三、servlet中取得數據
package servlet; import java.io.File; import java.io.IOException; import java.util.Date; import java.util.Iterator; import java.util.List; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; /** * Servlet implementation class UploadServlet */ @WebServlet("/UploadServlet") public class UploadServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //判斷上傳表單是否為multipart/form-data類型 if(ServletFileUpload.isMultipartContent(request)) { try { //1. 創建DiskFileItemFactory對象,設置緩沖區大小和臨時文件目錄 DiskFileItemFactory factory = new DiskFileItemFactory(); //System.out.println(System.getProperty("java.io.tmpdir"));//默認臨時文件夾 //2. 創建ServletFileUpload對象,並設置上傳文件的大小限制。 ServletFileUpload sfu = new ServletFileUpload(factory); sfu.setSizeMax(10*1024*1024);//以byte為單位 不能超過10M 1024byte = 1kb 1024kb=1M 1024M = 1G sfu.setHeaderEncoding("utf-8"); //3. 調用ServletFileUpload.parseRequest方法解析request對象,得到一個保存了所有上傳內容的List對象。 List<FileItem> fileItemList = sfu.parseRequest(request); Iterator<FileItem> fileItems = fileItemList.iterator(); //4. 遍歷list,每迭代一個FileItem對象,調用其isFormField方法判斷是否是上傳文件 while(fileItems.hasNext()) { FileItem fileItem = fileItems.next(); //普通表單元素 if(fileItem.isFormField()) { String name = fileItem.getFieldName();//name屬性值 String value = fileItem.getString("utf-8");//name對應的value值 System.out.println(name + " = "+value); } //<input type="file">的上傳文件的元素 else { String fileName = fileItem.getName();//文件名稱 System.out.println("原文件名:" + fileName);//Koala.jpg String suffix = fileName.substring(fileName.lastIndexOf('.')); System.out.println("擴展名:" + suffix);//.jpg //新文件名(唯一) String newFileName = new Date().getTime() + suffix; System.out.println("新文件名:" + newFileName);//image\1478509873038.jpg //5. 調用FileItem的write()方法,寫入文件 File file = new File(request.getServletContext().getRealPath("image")+"\\"+newFileName); System.out.println(file.getAbsolutePath()); fileItem.write(file); //6. 調用FileItem的delete()方法,刪除臨時文件 fileItem.delete(); /* * 存儲到數據庫時注意 * 1.保存源文件名稱 Koala.jpg * 2.保存相對路徑 image/1478509873038.jpg * */ request.setAttribute("image_name",fileName); request.setAttribute("image_path","image/"+newFileName); request.getRequestDispatcher("/upload.jsp").forward(request, response); } } } catch (FileUploadException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } } }
