1. 程式人生 > >百度UEditor的坑--2018--10--29

百度UEditor的坑--2018--10--29

下載百度ueditor的jar包 下載壓縮包 

解壓後的目錄

2.將jar加入到你的webapp或者是webConetnt(我的是webContent)

3.在頁面新增ueditor的HTML和js程式碼

<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<script type="text/javascript" charset="utf-8" src="${base}/ueditor/ueditor.config.js"></script>
<script type="text/javascript" charset="utf-8" src="${base}/ueditor/ueditor.all.min.js"></script>
<!--建議手動加在語言,避免在ie下有時因為載入語言失敗導致編輯器載入失敗-->
<!--這裡載入的語言檔案會覆蓋你在配置專案裡新增的語言型別,比如你在

配置專案裡配置的是英文,這裡載入的中文,那最後就是中文-->
<script type="text/javascript" charset="utf-8" src="${base}/ueditor/lang/zh-cn/zh-cn.js"></script>

<h1>商品描述</h1><!--初始化ueditor編輯器-->
<script id="editor" type="text/plain" style="width:850px;height:500px;"></script>

<script>
	//建立ueditor編輯器
	var ue = UE.getEditor('editor');

	//重新定義圖片上傳圖路徑
	UE.Editor.prototype._bkGetActionUrl = UE.Editor.prototype.getActionUrl;
	UE.Editor.prototype.getActionUrl = function(action) {
		if(action == 'uploadimage' || action == 'uploadscrawl' || action == 'uploadvideo') {
			return '/ueditor/upload/image.jhtml';//自己定義的上傳url路徑
		} else {
			return this._bkGetActionUrl.call(this, action);
		}
	}
	//獲取上傳成功返回json資料進行回顯
	var root = UE.htmlparser(UE.getEditor('articleContent').getContent(), true);
	var imgs = new Array();
	imgs = root.getNodesByTagName('img');
	var ueImg = {};
	for(var i = 0; i < imgs.length; i++) {
		console.log(imgs[i].getAttr('src'));
		if(!portal.utils.isEmpty(imgs[i].getAttr('alt'))) {
			var url = imgs[i].getAttr('src');
			var urlArray = imgs[i].getAttr('src').split("/");
			if(portal.utils.isEmpty(ueImg.oriName)) {
				ueImg.oriName = imgs[i].getAttr('alt');
				ueImg.newName = urlArray[urlArray.length - 1];
				ueImg.filePath = urlArray[3] + "/" + urlArray[4] + "/";
			} else {
				ueImg.oriName += "," + imgs[i].getAttr('alt');
				ueImg.newName += "," + urlArray[urlArray.length - 1];
				ueImg.filePath += "," + urlArray[3] + "/" + urlArray[4] + "/";
				alert(ueImg.oriName);
			}
		}

	}
</script>

4.由於我是用的是springmvc框架作為web端的框架 索引不能直接執行jsp檔案 只好參考網上大牛的部落格 這是jsp程式碼 把這些程式碼轉換成自己的controller控制層,由於修改了這個地方,需要修改ueditor.config.js

// 伺服器統一請求介面路徑   , serverUrl: URL + "/config/getConfig.jhtml"

在這裡如果配置不對會出現

後端配置項沒有正常載入 上傳外掛不能正常使用

再上傳頁面的地方(需要注意) 需要將config.json 放在ueditor/config 它會自動載入這個json檔案,如果找不到就會出 現異常 這個config是根據 上面的url config/getConfig.jhtml 自定義的

5.使用自定義的方式進行圖片上傳

//重新定義圖片上傳圖路徑
	UE.Editor.prototype._bkGetActionUrl = UE.Editor.prototype.getActionUrl;
	UE.Editor.prototype.getActionUrl = function(action) {
		if(action == 'uploadimage' || action == 'uploadscrawl' || action == 'uploadvideo') {
			return '/ueditor/upload/image.jhtml';//自己定義的上傳url路徑
		} else {
			return this._bkGetActionUrl.call(this, action);
		}
	}

以下是java程式碼

package com.amysky.wxmember.controller;

import java.io.File;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import com.amysky.wxmember.utils.FileInputImageUtils;
import com.baidu.ueditor.ActionEnter;

@Controller
@RequestMapping("/ueditor")
public class UeditorController {

	@RequestMapping("/config/getConfig.jhtml")
	@ResponseBody
	public String config(HttpServletRequest request) {

		String rootPath = request.getSession().getServletContext().getRealPath("/");
		return new ActionEnter(request, rootPath).exec();
	}

	@ResponseBody
	@RequestMapping(value = "/upload/image", method = RequestMethod.POST)
	public Map<String, Object> uploadImage(@RequestParam("upfile") MultipartFile upfile, HttpServletRequest request) {

		
		String getRealPath = "upload";
		
		String fileName = "commodity";
		
		String createFilePath = "wxmember" + File.separator + fileName;
		
		Map<String, Object> map = FileInputImageUtils.windowUditor(upfile, getRealPath, createFilePath, request);
		
		return map;
	}
}

/**
	 * 使用百度ueditor上傳圖片
	 * @param request
	 * @param getRealPath
	 * @param createFilePath
	 * @return
	 */
	public static Map<String,Object> windowUditor(MultipartFile multipartFile,String getRealPath, String createFilePath,HttpServletRequest request) {
		Map<String,Object> map = new HashMap<String,Object>();
		InputStream is=null;
		OutputStream os =null;
		try {
			//獲取檔名稱
			String originalFilename = multipartFile.getOriginalFilename();
			//獲取檔案的字尾
			String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
			//使用現在的 時間作為圖片的新名稱
			String fileName = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date());
			
			//獲取資料夾在Windows上的 真是檔案路徑 例如: upload資料夾
			String realPath = request.getServletContext().getRealPath(getRealPath);
			//建立儲存圖片的資料夾
			String path=realPath+File.separator+createFilePath;
			//不存在就建立
			File file = new File(path);
			if(!file.exists()){
				file.mkdirs();
			}
			//儲存檔案
			file=new File(path+File.separator+fileName+suffix);
			
			is = multipartFile.getInputStream();
			os= new FileOutputStream(file);
			//拷貝檔案
				copyFile(is, os);
				map.put("state", "SUCCESS");
				map.put("original", originalFilename);
				map.put("name", fileName);
				map.put("url", getRealPath+File.separator+createFilePath+File.separator+fileName+suffix);
				map.put("type", suffix);
				map.put("size", multipartFile.getSize());
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			try {
				os.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
			try {
				is.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return map;
	}

/**
	 * 檔案拷貝
	 * 
	 * @param is
	 * @param os
	 * @throws IOException
	 */
	private static void copyFile(InputStream is, OutputStream os) throws IOException {
		byte[] b = new byte[1024];
		int len = 0;
		while ((len = is.read(b)) != -1) {
			os.write(b, 0, len);
		}
		os.flush();
	}
	

前端頁面解析json資料程式碼

//獲取上傳成功返回json資料進行回顯
	var root = UE.htmlparser(UE.getEditor('articleContent').getContent(), true);
	var imgs = new Array();
	imgs = root.getNodesByTagName('img');
	var ueImg = {};
	for(var i = 0; i < imgs.length; i++) {
		console.log(imgs[i].getAttr('src'));
		if(!portal.utils.isEmpty(imgs[i].getAttr('alt'))) {
			var url = imgs[i].getAttr('src');
			var urlArray = imgs[i].getAttr('src').split("/");
			if(portal.utils.isEmpty(ueImg.oriName)) {
				ueImg.oriName = imgs[i].getAttr('alt');
				ueImg.newName = urlArray[urlArray.length - 1];
				ueImg.filePath = urlArray[3] + "/" + urlArray[4] + "/";
			} else {
				ueImg.oriName += "," + imgs[i].getAttr('alt');
				ueImg.newName += "," + urlArray[urlArray.length - 1];
				ueImg.filePath += "," + urlArray[3] + "/" + urlArray[4] + "/";
				alert(ueImg.oriName);
			}
		}

	}

6.進行圖片回顯 否則會在富文字編輯中不顯示圖片

我修改的地方是 

"imageUrlPrefix": "http://localhost:8080/", /* 圖片訪問路徑字首 */

加入自己的網址或者本地訪問方式

最終的效果圖

最後獲取富文字編輯器中的內容

content=UE.getEditor('editor').getContent();

也可以參考 ueditor資料夾中的那些js函式