公司做的一个小项目,新闻发布模块用的CKEditor+CKFinder,基本的使用没有什么问题,但存在巨大隐患。时间原因,本文没有提供CKEditor+CKFinder的入门配置,请谅解。
环境:Windows+Myeclipse+Tomcat7+Java1.7+ckeditor-java3.5.3+CKFinderJava-2.6.0
问题:这是一个不大的门户网站项目,整个项目是打成一个war包放在一个tomcat服务器下的。问题来了,因为没有单独的静态资源服务器,CKEditor+CKFinder上传文件时的存储路径在临时文件夹userfiles下面,tomcat正常运行的时候是没有问题的,但是一关闭,临时文件夹没了(也许你会说,tomcat关闭之前手动备份一下——我只能说,计算机很复杂,而你想法太单纯了。不是小编吹毛求疵,是这个问题真的很严重。而且小编觉得,作为一个程序员,我能用程序来做的事情,坚决不用人来做)。这会导致之前发的新闻显示不出图片,文件链接错误,因为新闻存到数据库,图片文件用的都是src路径。
开始上网查,查来查去都是些修改ckfinder的config.js文件,小编表示水平有限,网上的方法没能试出来。最后还是用自己最简单直接的思维来解决这个问题——文件上传到服务器的时候,同时上传一份到项目外的目录下面,好的,我们来看插件的源码。FileUploadCommand.class,对应的java文件在ckfinder的源代码中,路径如图。(感谢开源)
源码第279行,可以看到fileUpload方法调用了saveTemporaryFile()方法
那我们再看saveTemporaryFile方法,应该可以看懂是什么意思了
下面,我们把自己的项目中创建一个跟插件完全一样的包名,只复制FileUploadCommand.java文件,如图
这样的话,操作插件的时候,如果有文件上传,就会执行这个java文件里面的方法,读者可以自己试一试。下面我们就简单地修改一下代码,做一个备份就好了。(修改完了之后也可以用这个java的.class文件覆盖jar包中的class文件,这样项目看起来会干净些。class文件怎么弄?不用你手动去编译,运行项目,去tomcat下面,项目\WEB-INF\classes下面去找)
再运行项目,上传文件,你创建的目录和t项目下面的临时目录下面就都有了文件了。
注意:这是小编的个人项目上做测试,有些地方编码纯属为了节约时间,让和我一样的菜鸟方便理解,快速解决问题,如果是真实项目,记得把文件路径中的\\分隔符换成file.separator(),再加一些必要的非空判断,小编水平有限,没有能力误导大家呦!
最后:这是小编的第一篇博文,希望大家多多指教,如有不周之处,还望批评指正。本人偏向java后台开发,如果您有更好更简便的方法,请指教