Javaweb使用getPart接收表单文件过程解析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Javaweb使⽤getPart接收表单⽂件过程解析使⽤getPart接收表单⽂件时,注意Tomcat版本要在8之上。
前台 : form.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/test" method="post" enctype="multipart/form-data">
请选择⽂件:<input type="file" name="file"><br>
<input type="submit" value="提交">
</form>
</body>
</html>
后台:TestServlet
@WebServlet(name = "TestServlet", urlPatterns = "/test")
@MultipartConfig
public class TestServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取⽂件,参数为前台的name
Part part = request.getPart("photo");
//判断是否选择了⽂件
if (part.getSize() == 0) {
request.setAttribute("msg", "请选择⽤户头像");
request.getRequestDispatcher("/register.jsp").forward(request, response);
return; //不再执⾏后续操作
}
//获取⽂件名,获取到⽂件名的格式如:a.jpg
String fileName = part.getSubmittedFileName();
/**
截取⽂件名的后缀名:
stIndexOf('.')的返回值为"."的位置,加1表⽰后缀名的起始位置。
photo.substring(stIndexOf('.')+1),表⽰从后缀名的起始位置截取到结束位置。
* */
String fileType = fileName.substring(stIndexOf('.') + 1);
//判断该⽂件是不是图⽚格式
if (!("jpg".equalsIgnoreCase(fileType) || "jpeg".equalsIgnoreCase(fileType) || "png".equalsIgnoreCase(fileType))) {
//不是图⽚格式,停⽌下⼀步,并将信息反馈给前台页⾯
request.setAttribute("msg","上传的⽂件必须为图⽚");
request.getRequestDispatcher("/form.jsp").forward(request, response);
return;
}
//是图⽚类型,构建⼀个上传图⽚的存储路径
String path = "E:\\upload";
File file = new File(path);
if (!file.exists()) {
file.mkdirs(); //创建⽂件和⽂件夹
}
//将part内容写到⽂件夹内,⽣成⼀个⽂件
part.write(path + "/" + fileName);
}
}
String path = "E:\\testPic";设置成本地⽂件夹路径与Tomcat服务器脱离关联,可以防⽌⽂件丢失。
但需要将该⽂件夹挂载到Tomcat服务器。
挂载⽅式:Eclipse:
1、双击集成在Eclipse中的tomcat服务器
2、点击添加额外的web资源
3、将本地存储上传⽂件的⽂件夹添加进来即可!
⼀定要ctrl + S
IDEA:
优化:将上传图⽚封装成⼯具类
UploadUtils.java
public class UploadUtils {
public static String upload(Part part, HttpServletRequest request, HttpServletResponse response) {
//获取⽂件的名称
String photo = part.getSubmittedFileName();
//重命名该⽂件,防⽌出现重名⽂件被覆盖的情况
photo = UUID.randomUUID() + photo;
/**
截取⽂件名的后缀名:
stIndexOf('.')的返回值为"."的位置,加1表⽰后缀名的起始位置。
photo.substring(stIndexOf('.')+1),表⽰从后缀名的起始位置截取到结束位置。
* */
String fileType = photo.substring(stIndexOf('.') + 1);
//判断该⽂件是不是图⽚格式
if (!("jpg".equalsIgnoreCase(fileType) || "jpeg".equalsIgnoreCase(fileType) || "png".equalsIgnoreCase(fileType))) { //不是图⽚格式,返回空字串
return "";
}
//是图⽚类型,构建⼀个上传图⽚的存储路径,并返回字符串的名称,⽤于存储到数据库
String path = "E:\\upload";
File file = new File(path);
if (!file.exists()) {
file.mkdirs(); //创建⽂件和⽂件夹
}
//将part内容写到⽂件夹内,⽣成⼀个⽂件
try {
part.write(path + "/" + photo);
} catch (IOException e) {
e.printStackTrace();
}
return photo;
}
}
调⽤⼯具类:
@WebServlet(name = "TestServlet", urlPatterns = "/test")
@MultipartConfig
public class TestServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ //获取⽂件
Part part = request.getPart("photo");
//判断⽤户是否选择⽂件,如果没有选择头像,不进⾏后续操作
if (part.getSize() == 0) {
request.setAttribute("msg", "请选择⽤户头像");
request.getRequestDispatcher("/register.jsp").forward(request, response);
return;
}
String photo = UploadUtils.upload(part, request, response);
//判断photo是否为空字符串,为空字符串,说明不是图⽚类型,也不进⾏后续操作
if (photo == "") {
request.setAttribute("msg", "请选择图⽚类型的⽂件,如png,jpg,jpeg");
request.getRequestDispatcher("/register.jsp").forward(request, response);
return;
}
//不是空字符串,执⾏后续操作,如将路径存储到数据库等
............................................
}
以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。