專案中上傳圖片報錯
阿新 • • 發佈:2021-01-09
技術標籤: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及以上版本執行