1. 程式人生 > >fckEditor的使用以及圖片上傳不顯示解決

fckEditor的使用以及圖片上傳不顯示解決

寫過部落格的都是 在寫部落格的textarea 上面有一些按鈕 類似 word 工具欄 他們其實就是xhEditor.網頁編輯器。今天記錄的也是一種網頁編輯器。就是FCkEditor。使用他需要準備前端FckEditor外掛包。可以在官網下載https://ckeditor.com/  還有就是java-core2.6.jar . 將他們引入工程裡。

前端程式碼如下:

<%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:set var="ctx" value="${pageContext.request.contextPath }"></c:set>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="${ctx}/fckeditor/fckeditor.js"></script>
<script type="text/javascript">
$(function(){
	var fck=new FCKeditor("mytext");
	//設定根目錄
	var path="${pageContext.request.contextPath }";
	fck.BasePath=path+"/fckeditor/";
	fck.Height=400;
	fck.Config["ImageUploadURL"]=path+"/edit/uploadForFck";
	//渲染到textarea
	fck.ReplaceTextarea();
});
</script>
</head>
<body>
<textarea id="mytext"></textarea>
</body>
</html>
這裡說明一下 :我的jquery-1.12.4.js js的核心 其實已經引入了。這個頁面是ajax 區域性重新整理的 所以沒有再次引用。假如只是新的頁面的話需要核心js 引入。配置檔案資訊可以
到fckeditor/fckconfig.js 中檢視  在頁面js中修改。

注意二:我的fckeditor 放在webapp 下,其他頁面使用他的話 使用

pageContext.request.contextPath 加上+檔案路勁 (絕對路徑) 這樣可以無論你的使用頁面在哪裡  都可以找到引用的檔案。
重點:通過查閱資料發現要實現上傳的話需要修改
fck.Config["ImageUploadURL"]=path+"/edit/uploadForFck";
這是自己上傳路徑。經過測試發現圖片不顯示。火狐瀏覽器沒有報錯。於是在IE測試發現圖片報資源找不到。原來是因為我上傳到本地的D:/upoload 瀏覽器網站不允許直接去盤裡直接訪問
所以自己需要修改路徑 也就是在tomcat 配置虛擬路徑。如下: <Context debug="0" docBase="D:\" path="/file" reloadable="true"/> 這樣在java 上傳到本地後 fck需要回顯的話路徑寫虛擬路徑。
Java 上傳程式碼:

	@RequestMapping("/uploadForFck")
	public void uploadForFck(HttpServletRequest request, PrintWriter out) throws IOException{
		//強制轉換request
		MultipartHttpServletRequest mr = (MultipartHttpServletRequest) request;
		//獲得檔案
		Iterator<String> iter = mr.getFileNames();
		String fileInputName = iter.next();
		MultipartFile mf = mr.getFile(fileInputName);
		//獲得檔案的位元組陣列
		byte[] byteArr = mf.getBytes();
		String fileName = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date());
		Random  random = new Random();
		for(int i = 0 ; i < 3; i++){
			fileName = fileName + random.nextInt(10);
		}
		//獲得原始檔名
		String oriFileName = mf.getOriginalFilename();
		String suffix = oriFileName.substring(oriFileName.lastIndexOf("."));
		//獲得上傳檔案的絕對路徑
		String realPath =  "D:/"+fileName + suffix;
		String path="/file/"+fileName + suffix;
		FileCopyUtils.copy(byteArr, new FileOutputStream(new File(realPath)));
		//建立fck的上傳的響應物件
		UploadResponse ur = UploadResponse.getOK(path);
		out.print(ur);
	}