zoukankan      html  css  js  c++  java
  • 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();
            /**
             截取文件名的后缀名:
             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服务器

    img

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

    img

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

    img

    一定要ctrl + S

    IDEA:

    image-20200719121233092

    image-20200719121714219

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

    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;
        }
        //不是空字符串,执行后续操作,如将路径存储到数据库等
        ............................................
    }
    
  • 相关阅读:
    selector 使用说明
    volley用法之 以post方式发送 json 参数
    linux系统下使用流行的版本管理工具 Git
    Android BLE 蓝牙编程(四)
    Android BLE 蓝牙编程(三)
    Android BLE 蓝牙编程(二)
    Android BLE 蓝牙编程(一)
    php比较两个字符串是否相同
    下拉刷新
    理财小工具(二)贷款计算器
  • 原文地址:https://www.cnblogs.com/nieaojie625/p/13339258.html
Copyright © 2011-2022 走看看