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


浙公网安备 33010602011771号