Java接受带文件的表单_Javaweb使用getPart接收表单文件过程解析

使用getPart接收表单文件时,注意Tomcat版本要在8之上。

前台 : form.jsp

Title

请选择文件:

后台: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();

/**

截取文件名的后缀名:

photo.lastIndexOf('.')的返回值为"."的位置,加1表示后缀名的起始位置。

photo.substring(photo.lastIndexOf('.')+1),表示从后缀名的起始位置截取到结束位置。

* */

String fileType = fileName.substring(fileName.lastIndexOf('.') + 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服务器

1fa2f75adfe4e1d86699b2bef4662841.png

2、点击添加额外的web资源

53d58c47aac5b995fc0cf958e549df76.png

3、将本地存储上传文件的文件夹添加进来即可!

2a714929d43c548f03cff33a8e33edeb.png

一定要ctrl + S

IDEA:

95a91ce8ac551e5cf464bdee141ff075.png

4ffaef22e01115fbd4c1010d3dbf85c7.png

优化:将上传图片封装成工具类

UploadUtils.java

public class UploadUtils {

public static String upload(Part part, HttpServletRequest request, HttpServletResponse response) {

//获取文件的名称

String photo = part.getSubmittedFileName();

//重命名该文件,防止出现重名文件被覆盖的情况

photo = UUID.randomUUID() + photo;

/**

截取文件名的后缀名:

photo.lastIndexOf('.')的返回值为"."的位置,加1表示后缀名的起始位置。

photo.substring(photo.lastIndexOf('.')+1),表示从后缀名的起始位置截取到结束位置。

* */

String fileType = photo.substring(photo.lastIndexOf('.') + 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;

}

//不是空字符串,执行后续操作,如将路径存储到数据库等

............................................

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值