【Bug集锦】part.getSubmittedFileName()无法使用

@MultipartConfig注解方式上传文件(Tomcat8 和 servlet 3.0)

        JavaWeb中上传文件可以说是比较麻烦的,在servlet3.0之前,上传文件通常借助一些jar包来完成,其中相关的API较多,写起来非常不便.在servlet3.0以后,改进了部分的API,可以通过@multipartConfig注解以及相关的方法比较方便的进行文件上交.

详细讲解连接:https://blog.csdn.net/mytt_10566/article/details/71077154

protected void updateUser(HttpServletRequest req, HttpServletResponse resp) {
        try {
            //1.获得请求数据
            //1.1 获得请求的map
            Map<String, String[]> map = req.getParameterMap();
            //1.2 创建即将被封装的user
            User user = new User();
            //1.3 封装数据
            BeanUtils.populate(user, map);
            // -------------------------------------------------------------------文件上传
            // 图片对象
            Part pic = req.getPart("pic");
            if (pic != null && pic.getSize() != 0) {//一定有文件上传了
                //1.获得文件的名称
                // 使用tomcat 8以及servlet3.0时使用下面方法获取文件名称
                String fileName = pic.getSubmittedFileName(); //文件名称
                //2.获得文件即将保存位置
                //获得web项目在本地发布的后路径
                String realPath = getServletContext().getRealPath("/img");
                System.out.println(fileName);
                //3.拿到文件的流
                InputStream is = pic.getInputStream();
                //4.输出文件
                FileOutputStream os = new FileOutputStream(realPath + "/" + fileName);
                IOUtils.copy(is, os);
                //5.释放资源
                is.close();
                os.close();
                //赋值的路径
                //user.setPic(realPath + "/" + fileName)
                //使用相对路径
                user.setPic("img/" + fileName);
            }
            //-------------------------------------------------------------------文件上传
            //2.处理数据
            UserService userService = new UserServiceImpl();
            //修改用户信息
            userService.updateUser(user);
            //数据库和缓存session数据不同步 需要再次查询数据 放入session替换
            User loginUser = (User) req.getSession().getAttribute("user");
            //再次查询 替换数据
            loginUser = userService.findByTelephone(loginUser.getTelephone());
            //替换session用户数据
            req.getSession().setAttribute("user", loginUser);
            //3.响应结果
            resp.sendRedirect(req.getContextPath() + "/home_index.jsp");
        } catch (Exception e) {
            e.printStackTrace()
        }
    }

@MultipartConfig注解方式上传文件(Tomcat 7)

tomcat7 的环境下就没有part.getSubmittedFileName()这一方法,无法直接获取文件名

解决方案:

将上面代码的 String fileName = pic.getSubmittedFileName(); 使用以下代码替换即可解决问题.

String cd = part.getHeader("Content-Disposition");
//截取不同类型的文件需要自行判断
 String filename = cd.substring(cd.lastIndexOf("=")+2, cd.length()-1);

猜你喜欢

转载自blog.csdn.net/weixin_43267344/article/details/108955955
今日推荐