昨天配置好了FCKeditor,可以上傳圖片和文件了,可有一個(gè)問題還沒有解決,那就是上傳中文圖片的時(shí)候會出現(xiàn)亂碼,我的工程里用的編碼都是UTF-8的,在網(wǎng)上找了好些資料,都搞不定,最后下載了
fckeditor-java-2.4.1-src.zip(在http://www.fckeditor.net/download上也有下載).解壓縮之后,把源文件部署到工程里,可啟動老是報(bào)錯,不知道是啥回事兒,后來換成了手動的,操作如下
找到源文件中的 net.fckeditor.connector.ConnectorServlet.java,將其中的部分代碼改掉,我們先搞定圖片中文問題,需要做如下修改,大概在240多行的位置
String newFilename = null;
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
在其后添加一行,指定編碼為UTF-8的格式,如下
String newFilename = null;
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding("UTF-8");
代碼是改掉了,可怎么部署到應(yīng)用里面呢,前面有說到,直接將java源文件放在工程里編譯啟動里會報(bào)錯,不知道是我哪里沒弄好還是怎么回事,反正也沒去折騰了,改用土辦法
解壓fckeditor-java-core-2.4.1.jar里面的class放在WEB-INF/classes下,然后手工將新生成的ConnectorServlet.class文件替換掉 WEB-INF/classes/net/fckeditor/connector/ConnectorServlet.class ,再啟動服務(wù)器,如果沒有報(bào)錯的話,中文圖片的上傳問題就能搞定了
今天為了解決這個(gè)問題查了一天的資料,也順便看了很多文檔,好像是FCKeditor2.4之后可以配置上傳文件自動重命名的地方,我只看到一篇文檔上提到過一次,在官方網(wǎng)站上也沒有找到相關(guān)的說明,也就不去找什么配置了,反正源代碼已經(jīng)改動過了,不如把重命名也一起改了,找到net.fckeditor.connector.ConnectorServlet.java大概250行左右
// We upload only one file at the same time
FileItem uplFile = items.get(0);
String rawName = UtilsFile.sanitizeFileName(uplFile.getName());
String filename = FilenameUtils.getName(rawName);
String baseName = FilenameUtils.removeExtension(filename);
String extension = FilenameUtils.getExtension(filename);
將上面的代碼改為
// We upload only one file at the same time
FileItem uplFile = items.get(0);
String rawName = UtilsFile.sanitizeFileName(uplFile.getName());
String randTimer = String.valueOf(Calendar.getInstance().getTimeInMillis());
String randVal = String.valueOf(Math.abs((new Random()).nextInt()));
String filename = FilenameUtils.getName(rawName);
String baseName = randTimer + randVal;
String extension = FilenameUtils.getExtension(filename);
filename = baseName.concat(".").concat(extension);
即可,此處我是用時(shí)間的毫秒串再加上一個(gè)隨機(jī)數(shù)串構(gòu)成的新文件名,當(dāng)然也可以改成你自己喜歡的格式,如將毫秒改成日期時(shí)間字串,則只需修改
String randTimer = (new SimpleDateFormat("yyyyMMddHHmmss")).format(new Date());
改好了之后,重新生成class文件,按照上面的做法部署到應(yīng)用中去
為了方便使用,可以把修改后的class文件重新做成jar包,將WEB-INF/classes下的net和org目錄拷貝到一個(gè)新的空目錄中,然后在命令提示符下轉(zhuǎn)到該目錄,用如下命令可以生成新的jar包
jar -cvf fckeditor-java-2.4.1-rename.jar *.*
此處為生成一個(gè)fckeditor-java-2.4.1-rename.jar,當(dāng)然,名字可以自己定義
上面的做法可能不是很先進(jìn),在Eclipse里也有打包jar的操作,也許更新一個(gè)java源文件不會是這么麻煩,但總算這樣是搞定了,記錄在這里先