ssm 框架下的上傳文件功能
阿新 • • 發佈:2018-07-16
quest let mail body ring upload gem 擴展 stream 這兩天在弄上傳文件(圖片或視頻)的功能 ,特記錄於此,其核心是字符串的拼接路徑。要求是:服務器上(Tomcat為例)保存上傳的圖片或視頻,數據庫中插入相對路徑。數據庫中的A表設置一個字段 img_dir,用於存取文件路徑,每次是以更新的形式拼接到原有的字段中。具體的可以debug controller看一下,字符串每一步的情況。(我之前是參考了某位大神的博客,記不清地址了,抱歉!!)
主要邏輯如下:
controller:
/**
主要邏輯如下:
controller:
/**
-
上傳文件*/
@RequestMapping("/onefile")
br/>*/
@RequestMapping("/onefile")
HttpServletRequest request, Model model, AAccidentManagement management)// 傳入一個事故ID String accidentID = request.getParameter("accidentID"); accidentID = "00520180509002"; if (StringUtils.isEmpty(accidentID)) { model.addAttribute("msg", "事故ID為空"); model.addAttribute("code", 1); return model; } if (file == null) { model.addAttribute("msg", "上傳失敗:文件為空"); model.addAttribute("code", 111); return model; } // 獲得原始文件名 String fileName = file.getOriginalFilename(); System.out.println("原文件名:" + fileName); // 獲取上傳文件擴展名 String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length()); // 對擴展名進行小寫轉換 fileExt = fileExt.toLowerCase(); // 圖片文件大小過濾 if (!"jpg".equals(fileExt) && !"png".equals(fileExt) && !"mp4".equals(fileExt)) { model.addAttribute("msg", "上傳失敗:無效的圖片/視頻類型"); model.addAttribute("code", 111); return model; } // long fileSize = file.getSize(); // if (fileSize > (500 * 1024)) // { // model.addAttribute("msg", "上傳失敗:文件大小不能超過500K"); // model.addAttribute("code", 111); // return model; // } // 新文件名 String newFileName = UUID.randomUUID() + fileName; String realPath = request.getServletContext().getRealPath("/"); String realPathParent = (new File(realPath)).getParent(); // 上傳位置 String path = realPathParent + "/img/"; // 設定文件保存的目錄 File f = new File(path); if (!f.exists()) f.mkdirs(); if (!file.isEmpty()) { try { FileOutputStream fos = new FileOutputStream(path + newFileName); InputStream in = file.getInputStream(); int b = 0; while ((b = in.read()) != -1) { fos.write(b); } fos.close(); in.close(); } catch (Exception e) { e.printStackTrace(); } } management.setAccidentID(accidentID); List<String> strList = new ArrayList<String>(); List<String> mapList = new ArrayList<String>(); List<String> listMap = new ArrayList<String>(); String pathNew = "/img/" + newFileName; // 往數據庫中插入(路徑拼接)數組 String strMap = uploadService.selectPaths(management); if (StringUtils.isEmpty(strMap)) { strList.add(pathNew); } else { String[] str1 = strMap.split(","); for (String list : str1) { strList.add(list); } strList.add(pathNew); } for (String map : strList) { mapList.add(map); } // 集合 System.out.println("上傳圖片到:" + path + newFileName); String imgDir = mapList.toString().replace("[", "").replace("]", ""); management.setImgDir(imgDir); model.addAttribute("code", uploadService.updatePath(management) > 0 ? 0 : 1); // 返回所有圖片的絕對路徑 for (String map : strList) { fileExt=map.substring(map.indexOf(".")).replace("]", ""); switch (fileExt) { case ".jpg": map = map.substring(map.indexOf("img") - 1, map.indexOf(".jpg") + 4); break; case ".png": map = map.substring(map.indexOf("img") - 1, map.indexOf(".png") + 4); break; case ".mp4": map = map.substring(map.indexOf("img") - 1, map.indexOf(".mp4") + 4); break; default: break; } // 封裝圖片顯示路徑(根據當前訪問的客戶端請求的地址來封裝) String request_path = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort(); listMap.add(request_path + map); } imgDir = listMap.toString().replace("[", "").replace("]", ""); model.addAttribute("imgDir", imgDir); model.addAttribute("code", 99); return null;
}
service:
dao:
serviceImpl:
xml:
ssm 框架下的上傳文件功能