posts - 2, comments - 27, trackbacks - 0, articles - 60
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

搞定FCKeditor2.6.4上传中文图片的问题

Posted on 2009-06-03 14:41 ZhouFeng 阅读(1740) 评论(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源文件不会是这么麻烦,但总算这样是搞定了,记录在这里先

只有注册用户登录后才能发表评论。


网站导航: