JSP+SERVLET文件上传

时间:2022-04-29 17:24:15

作者: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("上传成功!");
		
	}

}

  JSP+SERVLET文件上传