posts - 2, comments - 27, trackbacks - 0, articles - 60
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          搞定FCKeditor2.6.4上傳中文圖片的問題

          Posted on 2009-06-03 14:41 ZhouFeng 閱讀(1746) 評論(0)  編輯  收藏 所屬分類: 原創 、CKEditor
          昨天配置好了FCKeditor,可以上傳圖片和文件了,可有一個問題還沒有解決,那就是上傳中文圖片的時候會出現亂碼,我的工程里用的編碼都是UTF-8的,在網上找了好些資料,都搞不定,最后下載了fckeditor-java-2.4.1-src.zip(在http://www.fckeditor.net/download上也有下載).解壓縮之后,把源文件部署到工程里,可啟動老是報錯,不知道是啥回事兒,后來換成了手動的,操作如下
          找到源文件中的 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");
          代碼是改掉了,可怎么部署到應用里面呢,前面有說到,直接將java源文件放在工程里編譯啟動里會報錯,不知道是我哪里沒弄好還是怎么回事,反正也沒去折騰了,改用土辦法
          解壓fckeditor-java-core-2.4.1.jar里面的class放在WEB-INF/classes下,然后手工將新生成的ConnectorServlet.class文件替換掉 WEB-INF/classes/net/fckeditor/connector/ConnectorServlet.class ,再啟動服務器,如果沒有報錯的話,中文圖片的上傳問題就能搞定了

          今天為了解決這個問題查了一天的資料,也順便看了很多文檔,好像是FCKeditor2.4之后可以配置上傳文件自動重命名的地方,我只看到一篇文檔上提到過一次,在官方網站上也沒有找到相關的說明,也就不去找什么配置了,反正源代碼已經改動過了,不如把重命名也一起改了,找到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);
          即可,此處我是用時間的毫秒串再加上一個隨機數串構成的新文件名,當然也可以改成你自己喜歡的格式,如將毫秒改成日期時間字串,則只需修改
          String randTimer = (new SimpleDateFormat("yyyyMMddHHmmss")).format(new Date());
          改好了之后,重新生成class文件,按照上面的做法部署到應用中去

          為了方便使用,可以把修改后的class文件重新做成jar包,將WEB-INF/classes下的net和org目錄拷貝到一個新的空目錄中,然后在命令提示符下轉到該目錄,用如下命令可以生成新的jar包
          jar -cvf fckeditor-java-2.4.1-rename.jar *.*
          此處為生成一個fckeditor-java-2.4.1-rename.jar,當然,名字可以自己定義

          上面的做法可能不是很先進,在Eclipse里也有打包jar的操作,也許更新一個java源文件不會是這么麻煩,但總算這樣是搞定了,記錄在這里先
          主站蜘蛛池模板: 亚东县| 邹平县| 榆林市| 鲁甸县| 佳木斯市| 德安县| 苍山县| 许昌县| 简阳市| 四会市| 黄平县| 保靖县| 田东县| 龙山县| 鲜城| 平安县| 黄陵县| 庆元县| 久治县| 本溪市| 金沙县| 兰西县| 南溪县| 迁西县| 玉山县| 水城县| 若羌县| 鄂托克前旗| 兰州市| 临泽县| 东港市| 武强县| 郧西县| 凭祥市| 太康县| 安达市| 巴彦淖尔市| 正镶白旗| 麦盖提县| 永寿县| 柘城县|