UMeditor是UEditor的簡潔版,保留了UEditor中經常使用的功能,在代碼量和加載速度上均有很大的提高。javascript
本文上傳圖片的執行後臺基於jfinal框架。css
一、html加載調用的樣式和腳本,爲保證圖片能上傳到服務器,此處須要作幾點配置:html
1)window.UMEDITOR_HOME_URL是相對於網站根目錄的相對路徑,爲了不上傳過程當中的路徑問題,此處最好作配置java
2)imageUrl 圖片上傳到後臺時,對應的處理方法。jquery
3)imagePath圖片的網絡路徑,圖片保存時只保存了圖片名稱,顯示時須要作網絡映射,下面的tomcat server.xml中會有相關配置。web
1 <link href="themes/default/css/umeditor.css" type="text/css" rel="stylesheet"> 2 <script type="text/javascript" src="third-party/jquery.min.js"></script> 3 <script type="text/javascript" src="third-party/template.min.js"></script> 4 <script type="text/javascript" charset="utf-8" src="umeditor.config.js"></script> 5 <script type="text/javascript" charset="utf-8" src="umeditor.min.js"></script> 6 <script type="text/javascript" src="lang/zh-cn/zh-cn.js"></script> 7 8 <!--style給定寬度能夠影響編輯器的最終寬度--> 9 <script type="text/plain" id="myEditor" style="width:1000px;height:240px;"> 10 <p>這裏我能夠寫一些輸入提示</p> 11 </script> 12 <script> 13 window.UMEDITOR_HOME_URL = "${base}/back/umeditor/";/** "相對於網站根目錄的相對路徑"**/ 14 var um = UM.getEditor('myEditor', { 15 imageUrl:'${base}/back/uploadImages',/**圖片上傳執行action**/ 16 imagePath:'/upload/',/**圖片網絡顯示路徑**/ 17 focus: true 18 }); 19 20 </script>
二、後臺處理程序json
1 /**上傳圖片**/ 2 public void uploadImages(){ 3 List<Map<String,Object>> upload=uploadFiles(getRequest(), PropKit.get("upload_path"), 10, "", "gif,jpg,jpeg,png,bmp"); 4 renderJson(JsonKit.toJson(upload.get(0))); 5 } 6 private static FileRenamePolicy fileRenamePolicy = new DefaultFileRenamePolicy(); 7 /** 8 * 9 * @param request 文件上傳請求 10 * @param uploadPath 文件上傳路徑 11 * @param maxPostSize 文件傳輸最大大小(MB) 12 * @param encoding 字符編碼集設置(默認utf-8) 13 * @param filetype 上傳文件格式(擴展名與擴展名間用","隔開,擴展名前沒有".") 14 * @return 上傳的文件名及文件路徑 15 */ 16 public static List<Map<String,Object>> uploadFiles(HttpServletRequest request,String uploadPath,int maxPostSize,String encoding,String filetype){ 17 18 encoding=encoding==null||"".equals(encoding)?"utf-8":encoding; 19 20 File dir = new File(uploadPath); 21 if ( !dir.exists()) { 22 if (!dir.mkdirs()) { 23 throw new IllegalArgumentException("文件路徑沒法建立"); 24 } 25 } 26 27 List<Map<String,Object>> uploadFileDatas=new ArrayList<Map<String,Object>>(); 28 29 try { 30 MultipartRequest multipartRequest = new MultipartRequest(request, uploadPath, maxPostSize*1024*1024, encoding, fileRenamePolicy); 31 Enumeration<?> files = multipartRequest.getFileNames(); 32 while (files.hasMoreElements()) { 33 String name = (String)files.nextElement(); 34 String filesystemName = multipartRequest.getFilesystemName(name); 35 // 校驗文件格式 36 if (filesystemName != null) { 37 Map<String, Object> ulfd=new HashMap<String,Object>(); 38 if(checkFileType(filesystemName.substring(filesystemName.lastIndexOf(".")+1),filetype)){ 39 ulfd.put("parameterName", name); 40 ulfd.put("uploadPath", uploadPath+System.getProperty("file.separator")+filesystemName);//圖片的物理路徑 41 ulfd.put("url", filesystemName); 42 ulfd.put("originalFileName", multipartRequest.getOriginalFileName(name)); 43 ulfd.put("contentType", multipartRequest.getContentType(name)); 44 ulfd.put("state", "SUCCESS"); 45 }else{ 46 new File(uploadPath+"/"+filesystemName).delete(); 47 ulfd.put("state", "文件格式非法"); 48 } 49 uploadFileDatas.add(ulfd); 50 } 51 } 52 } catch (Exception e) { 53 throw new RuntimeException(e); 54 } 55 return uploadFileDatas; 56 } 57 58 private static boolean checkFileType(String extension,String filetype){ 59 filetype=(filetype==null?"":filetype); 60 String[] types=filetype.split(","); 61 for(int i=0;i<types.length;i++){ 62 if(!extension.trim().toLowerCase().equals(types[i].trim().toLowerCase())){ 63 break; 64 }else if(i==types.length-1){ 65 return false; 66 } 67 } 68 return true; 69 }
tomcat server配置tomcat
<Context docBase="D:/webapps/upload/ssmt" path="/upload" reloadable="true" />服務器
項目配置文件網絡
upload_path=D:/webapps/upload/ssmt
js腳本中也要作更改
此圖中紅色框框是原來的代碼,作測試時發現獲得的返回值外面多了一層<pre></pre>,不知道哪裏加上的,改爲下方一行代碼後就能獲取到正確的json字符串了。
執行效果: