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

    科技2024-12-07  16

    @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);

     

    Processed: 0.008, SQL: 8