1. 程式人生 > 其它 >專案中上傳圖片報錯

專案中上傳圖片報錯

技術標籤:tomcat

上傳圖片,無法使用part.getSubmittedFileName()方法

問題描述:
在tomcat8使用servlet3.0上傳檔案,原來按以下步驟就可以完成

1.Part part = request.getPart(“XX”);
2.part.getSubmittedFileName()//直接獲取檔名
3.part.write(realPath)

tomcat7 的環境下就沒有part.getSubmittedFileName()這一方法,無法直接獲取檔名

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()
        }
    }

解決方案:
1.將程式碼區的 String fileName = pic.getSubmittedFileName(); 使用以下程式碼替換即可解決問題
String cd = part.getHeader(“Content-Disposition”);
//擷取不同型別的檔案需要自行判斷
String filename = cd.substring(cd.lastIndexOf("=")+2, cd.length()-1);

2.執行的伺服器換成Tomcat8及以上版本執行