Servlet实现图片文件上传
1.首先要导入以下两个jar包:
commons-fileupload-1.2.1.jar
commons-io-1.4.jar
2.jsp文件:index.jsp
1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <% 3 String path = request.getContextPath(); 4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 5 %> 6 7 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 8 <html> 9 <head> 10 <base href="<%=basePath%>"> 11 12 <title>文件上传</title> 13 <meta http-equiv="pragma" content="no-cache"> 14 <meta http-equiv="cache-control" content="no-cache"> 15 <meta http-equiv="expires" content="0"> 16 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> 17 <meta http-equiv="description" content="This is my page"> 18 <!-- 19 <link rel="stylesheet" type="text/css" href="styles.css"> 20 --> 21 </head> 22 23 <body> 24 表单/带文件 25 <br> 26 <!-- application/x-www-form-urlencoded只有字符串的表单 --> 27 <form action="${pageContext.request.contextPath}/UploadPictureServlet" method="post" enctype="multipart/form-data"> 28 29 文件名 30 <input type="text" name="filename"> 31 <br /> 32 文件 33 <input type="file" name="file"> 34 <br /> 35 <input type="submit" value="提交"> 36 </form> 37 </body> 38 </html>
3.Servlet文件:
package com.pearl.util;
1 import java.io.File; 2 import java.io.IOException; 3 import java.io.InputStream; 4 import java.util.List; 5 import java.util.UUID; 6 7 import javax.servlet.ServletException; 8 import javax.servlet.http.HttpServlet; 9 import javax.servlet.http.HttpServletRequest; 10 import javax.servlet.http.HttpServletResponse; 11 12 import org.apache.commons.fileupload.FileItem; 13 import org.apache.commons.fileupload.disk.DiskFileItemFactory; 14 import org.apache.commons.fileupload.servlet.ServletFileUpload; 15 16 public class UploadPictureServlet extends HttpServlet { 17 18 public void destroy() { 19 super.destroy(); 20 } 21 22 public void doGet(HttpServletRequest request, HttpServletResponse response) 23 throws ServletException, IOException { 24 doPost(request, response); 25 } 26 27 public void doPost(HttpServletRequest request, HttpServletResponse response) 28 throws ServletException, IOException { 29 30 try { 31 // ① 创建ServletFileUpload实例 32 DiskFileItemFactory factory = new DiskFileItemFactory(); 33 34 String realPath = getServletContext().getRealPath("/"); 35 // // 【设置缓存目录】 36 factory.setRepository(new File(realPath)); 37 ServletFileUpload upload = new ServletFileUpload(factory); 38 // ② 创建DiskFileItemFactory 39 // ③ 解析request获取List<FileItem> 40 // 【表单大小总和】 41 upload.setSizeMax(1024 * 1024 * 60); 42 // 【单个文件不得超过】 43 upload.setFileSizeMax(1024 * 1024 * 20); 44 // 【处理中文乱码】 45 upload.setHeaderEncoding("UTF-8"); 46 if (upload.isMultipartContent(request)) {// 判断是否为带文件表单 <form 47 // enctype="multipart/form-data" 48 List<FileItem> list = upload.parseRequest(request); 49 for (FileItem item : list) { 50 // 文本或文件 51 if (item.isFormField()) { 52 // 文本字段 53 // 获取变量名 54 String key = item.getFieldName();// 表单字段的变量名 55 String value = item.getString("UTF-8");// 表单字段的输入值 56 System.out.println(key); 57 System.out.println(value); 58 } else { 59 // 文件 60 // 文件类型 61 // text/plain .txt 62 // image/png .png 63 // image/bmp .bmp 64 String contentType = item.getContentType(); 65 // 文件名 66 String fileName = item.getName();// 表单的输入框值 67 // 变量名 68 String name = item.getFieldName();// 表单的变量名 69 // 文件 内容 70 String content = item.getString(); 71 // 二进制文件 72 InputStream input = item.getInputStream(); 73 System.out.println(contentType); 74 System.out.println(fileName); 75 System.out.println(name); 76 //System.out.println(content); 77 System.out.println(input); 78 79 // ① 服务端目录 (服务端真实路径) 80 String dir = getServletContext().getRealPath("/upload"); 81 System.out.println(dir); 82 // ② 文件名冲突 83 if (fileName.contains("/")) { 84 fileName = fileName.substring(name.lastIndexOf("/") + 1); 85 System.out.println(fileName); 86 } 87 // (添加前缀 唯一字符串, 时间毫秒值 UUID随机产生全球唯的id) 88 String path = UUID.randomUUID().toString() + "#" + fileName; 89 90 // ③ 写入File对象 91 File driSave = new File(dir); 92 if (!driSave.exists()) { 93 driSave.mkdir(); 94 } 95 File saveFile = new File(dir, path); 96 97 if (!saveFile.exists()) { 98 saveFile.createNewFile(); 99 } 100 System.out.println(saveFile.getAbsolutePath()); 101 item.write(saveFile); 102 // 删除临时文件 103 item.delete(); 104 input.close(); 105 } 106 107 } 108 } else { 109 System.out.println("表单不存在文件"); 110 } 111 // ④ 循环显示内容FileItem 112 } catch (Exception e) { 113 // TODO Auto-generated catch block 114 e.printStackTrace(); 115 } 116 } 117 118 public void init() throws ServletException { 119 120 } 121 122 }
4.web.xml文件
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app version="2.5" 3 xmlns="http://java.sun.com/xml/ns/javaee" 4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 5 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 6 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 7 8 <servlet> 9 <description>This is the description of my J2EE component</description> 10 <display-name>This is the display name of my J2EE component</display-name> 11 <servlet-name>UploadPictureServlet</servlet-name> 12 <servlet-class>com.pearl.util.UploadPictureServlet</servlet-class> 13 </servlet> 14 15 <servlet-mapping> 16 <servlet-name>UploadPictureServlet</servlet-name> 17 <url-pattern>/UploadPictureServlet</url-pattern> 18 </servlet-mapping> 19 <welcome-file-list> 20 <welcome-file>index.jsp</welcome-file> 21 </welcome-file-list> 22 </web-app>
5.完成