一,下載fckeditor包
fckeditor-java-2.4.1-bin.zip
FCKeditor_2.6.4.zip
:http://www.fckeditor.net/download
二,下載slf4j-1.5.2.zip包
:http://slf4j.org/dist/
三,提取所需要的檔案:
1,fckeditor-java-2.4.1-bin.zip解壓出來的commons-fileupload-1.2.1.jar,commons-io-1.3.2.jar,fckeditor-java-core-2.4.jar,slf4j-api-1.5.2.jar這四個放到WEB-INF的lib檔案夾下。
2,FCKeditor_2.6.4.zip解壓出來後把fckeditor檔案夾放到根目錄下面。
3,slf4j-1.5.2.zip解壓出來後把slf4j-simple-1.5.2.jar放到WEB-INF的lib檔案夾下。
四,在classes建立屬性檔案fckeditor.properties,內容為connector.userActionImpl=net.fckeditor.requestcycle.impl.UserActionImpl
五,在web.xml中添加如下資訊:
<servlet>
<servlet-name>Connector</servlet-name>
<servlet-class>net.fckeditor.connector.ConnectorServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Connector</servlet-name>
<url-pattern>/fckeditor/editor/filemanager/connectors/*</url-pattern>
</servlet-mapping>
六,測試回合
<%@ taglib uri="http://java.fckeditor.net" prefix="FCK"%>
2.4.1的版本用下面的
<FCK:editor instanceName="EditorDefault">
控制項中要顯示的初始內容
</FCK:editor>
2.4的版本用下面的
<FCK:editor instanceName="Default" value=" ">
</FCK:editor>
七,解決中文圖片上傳後亂碼問題
1、中文圖片上傳後檔案名稱顯示為亂碼的情況
2、建立目錄時中文為亂碼的情況
3、當引用的圖片為中文時,在頁面中顯示為紅叉的情況
這種亂碼情況,就我目前的感覺而言是Fckeditor的Bug,不是我們有沒有配置正確的問題了,要想解決以上三個問題,需要我們修改Fckeditor的源碼。
對於問題1和2我們可以把它用一個方法解決掉,使用UUID(此類位於java.util.UUID,不明白的可以查API)解決掉此問題。思路是把這些上傳上來的中文名字進行隨機重新命名英文字串,這樣就不存在中文問題了。
由於我們無法直接修改FckEditor,所以需要我們重寫ConnectorServlet這個Servlet檔案,我們在我們的項目裡面建立一個Class檔案,命名為ConnectorServlet,直接把net.fckeditor.connector.ConnectorServlet的內容copy過來。另外需要修改web.xml檔案把servlet的指向定位到我們自己重寫的Servlet
假如我們把我們建立的ConnectorServlet放在包test.fckeditor下面,則WEB.XML需要把:
<servlet-class>
net.fckeditor.connector.ConnectorServlet
</servlet-class>
改成
<servlet-class>
test.fckeditor.ConnectorServlet
</servlet-class>
其他保持不變就即可!
在我們copy後會出現一個報錯,說是Messages這個找不到,我們使用Eclipse的修複功能匯入net.fckeditor.connector.Messages這個包就可以了。
下面我們開始修改這個Servlet,解決我們上述的三個中文亂碼問題。
第一個問題:找到doPost方法中的try...catch語句塊。在try前面增加這麼一行語句:
upload.setHeaderEncoding("UTF-8");
在這裡我們對於這個upload進行編碼,解決中文問題。到這裡對於項目進行重新布署就會發現再上傳中文名字的圖片就不會顯示為亂碼了。
第二個問題:找到doGet方法中的
String newFolderStr = UtilsFile.sanitizeFolderName(request
.getParameter("NewFolderName"));
修改為:
String tempStr = request.getParameter("NewFolderName");
tempStr = new String(tempStr.getBytes("iso8859-1"),"utf-8");
String newFolderStr = UtilsFile.sanitizeFolderName(tempStr);
在原來的代碼中沒有對rerquest的資料進行重新編碼,所以遇到中文就會出現亂碼!
第三個問題:其實有兩種解決方案,一是修改伺服器的URL編碼,但是修改伺服器的話,在我們自己的電腦上比較方便,如果是我們要放到自己買的空間中就不容易了。另外如果修改了伺服器的編碼,可能影響到其它項目。所以這種方法就不寫了
二是我們使用UUID對上傳的檔案進行重新命名成英文字條串。
找到doPost中的try語句塊中的第一個if 即:
if (!ExtensionsHandler.isAllowed(resourceType, extension))
ur = new UploadResponse(UploadResponse.SC_INVALID_EXTENSION);
在這段代碼前面添加下面的一行語句:
filename = UUID.randomUUID().toString()+"."+extension; //extension為副檔名,在上文中得到的
這樣我們的三個問題都解決了。如果我們做了第三步,那第一個修改也就沒有什麼作用了,所以使用的話,只進行二三步就OK了。