作者:gqk
2018-11-12
文件上传在开发中经常使用,Servlet3中提供了注解的方式方便的可以实现文件上传,无需导入jar
@MultipartConfig
使用注解@MultipartConfig 将一个 Servlet 标识为支持文件上传。Servlet3.0 将
multipart/form-data 的 POST 请求封装成 Part,通过 Part 对文件进行上传。
Servlet3 没有提供直接获取文件名的方法,需要从请求头中解析出来
创建文件上传的jsp upload.jsp:
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="uploadServlet" method="post" enctype="multipart/form-data"> 11 <table> 12 <tr> 13 <td></td> 14 <td><h1>文件上传</h1></td> 15 </tr> 16 <tr> 17 <td>文件描述</td> 18 <td><input type="text" name="desc"></td> 19 </tr> 20 <tr> 21 <td>文件上传</td> 22 <td><input type="file" name="file"></td> 23 </tr> 24 <tr> 25 <td></td> 26 <td><input type="submit" value="上传文件"/></td> 27 </tr> 28 </table> 29 </form> 30 </body> 31 </html>
创建Servlet进行文件上传实现:
UploadServlet.java
package com.xkrj.servlet; import java.io.IOException; import java.util.UUID; import javax.servlet.ServletException; import javax.servlet.annotation.MultipartConfig; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.Part; @WebServlet("/uploadServlet") @MultipartConfig//上传文件必须添加@MultipartConfig public class UploadServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //文件描述 String desc = req.getParameter("desc"); //获取上传的文件 Part part = req.getPart("file"); //获取文件的信息 String name = part.getHeader("content-disposition"); System.out.println(name); System.out.println(desc); //设置文件的上传路径 String path = req.getServletContext().getRealPath("/upload"); //获取文件的后缀 String str=name.substring(name.lastIndexOf("."), name.length()-1); System.out.println(str); //生成一个新的文件名,不重复,数据库存储的就是这个文件名,不重复的 String filename=path+"\\"+UUID.randomUUID().toString()+str; System.out.println(filename); //上传文件 part.write(filename); System.out.println("上传成功!"); } }