一、tomcat配置
1、在tomcat安裝目錄下找到conf目錄(tomcat/conf/service.xml),修改service.xml文件:
path:虛擬路徑,以 / 開頭;
docBase:磁盤路徑(絕對路徑),Windows環境以盤符(D:/template)開始,linux環境如下;
reloadable:為 true 時 當web.xml或者class有改動的時候都會自動重新加載不需要從新啟動服務;
<Context path="/template" docBase="/home/template" reloadable="true" />
注:增加的配置需放在<Host></Host>標簽內;
建議docBase的路徑不要和tomcat放在一起,首先因為配置虛擬路徑就是想做資源服務器,將資源獨立出來,放到項目或tomcat中就和將資源放到項目中一樣,其次會增加tomcat的負載;
2、上傳
上傳資源時需要將資源上傳到docBase(絕對路徑)路徑下
@RequestMapping(value = "uploadImg", produces = MediaType.APPLICATION_JSON_UTF8_VALUE) @ResponseBody public Object uploadImg(MultipartFile file, HttpSession session, HttpServletRequest request) { SessionContainer s = (SessionContainer) session.getAttribute("sc"); ResultVo resultVo = new ResultVo(); resultVo.setCode(ResultEnum.ERROR.getCode()); // String call_path = Global.getProperty("VOUCHER_IMAGE_URL"); String call_path = "/template"; // String path = Global.getProperty("VOUCHER_IMAGE_DIR"); String path = "/home/template/"; try { String fileName = file.getOriginalFilename(); String date = com.ronglian.bms.commons.utils.DateUtil.getDate("yyyyMMdd"); String rand = RandomUtil.randomNumbers(3); String merchNo = s.getMerchNo(); if (StringUtils.isBlank(merchNo)) { merchNo = Constants.ROOT_ORG_CODE; } String lastStr = fileName.substring(fileName.lastIndexOf(".")); path = path + merchNo + "/"; fileName = date + rand + lastStr; File dir = new File(path, fileName); if (!dir.exists()) { dir.mkdirs(); } dir.setWritable(true, false); file.transferTo(dir); // 圖片物理路徑 String phy_path = dir.getPath(); // 圖片訪問路徑 String filePath = call_path + "/" + merchNo + "/" + fileName; logger.info("圖片真實路徑:" + phy_path); logger.info("上傳成功,模板路徑:" + filePath); resultVo.setCode(ResultEnum.SUCCESS.getCode()); resultVo.setMsg(filePath); } catch (IOException e) { logger.error("上傳出錯,原因:", e); } return resultVo; }
filePath:圖片回顯路徑需要用虛擬路徑,如:http://ip:port/template/圖片.jpg
3、保存及回顯
將圖片路徑保存到數據庫,可保存兩個,一個圖片真實的物理路徑,一個為圖片的虛擬路徑,或只存圖片虛擬路徑即可;
注:tomcat配置的虛擬路徑中沒有配置項目名稱,一般項目的資源訪問都有項目名,此時需要將項目名稱去掉,或者再tomcat中配置虛擬路徑時將項目名稱配置進去即可。