公司最近项目上线,突然发现fckeditor出现了问题,老大让我研究一下,哎,能力有限搞了两天终于弄出来了。
我使用的是fckeditor-java-2.6-bin.zip和FCKeditor_2.6.4.1.zip,这个就不告诉你网址了,因为我也忘记了,哈哈......
开始的时候按照文档上的步骤做老是报Invalid current folder specified这个错,那么我就到网上找呀找,嘿嘿,还真找到了。
但是大部分都是传到相对路径上。我这个有点不一样就是要传到绝对路径上去,因为我们这个项目是商城,上传的图片不是一般的多,
出于性能的考虑,我们的图片是有一个图片服务器的,图片也是用httpd进行显示的,故而图片所要传到指定的位置。
我在网上找到这么一篇文章http://blog.csdn.net/winnernoom/article/details/5868903确实不错,但是还是不能满足需要。但是给我提供了思路,在此表示感谢!
如下是我的fckeditor.properties文件:
connector.userFilesPath=http://localhost
connector.userFilesAbsolutePath=var/www/html/
connector.userActionImpl=net.fckeditor.requestcycle.impl.UserActionImpl
connector.impl=net.fckeditor.connector.impl.LocalConnector
connector.userPathBuilderImpl=net.fckeditor.requestcycle.impl.MyContextPathBuilder
解释一下:
userFilespath是访问上传图片的地址,userFilesAbsolutePath存放图片的绝对路径(在linux上,在windows上会在eclipse的同级目录下面)
userActionImpl这个自己看文档去,impl这个当你想把图片上传到绝对路径的时候必须用net.fckeditor.requestcycle.impl.UserActionImpl这个类,
由于图片上传完了之后就会生成一个图片访问路径,本来好好的,但是路径前面老是多了一个/工程名称,找了好久,终于找到了。原来是在里面有一个默认
生成访问路径的类(在fckeditor的核心包/net/fckeditor/handlers/default.properties里面看到)ContextPathBuilder,看一下源码:
package net.fckeditor.requestcycle.impl;
import javax.servlet.http.HttpServletRequest;
public class ContextPathBuilder extends ServerRootPathBuilder
{
public String getUserFilesPath(HttpServletRequest request)
{
return request.getContextPath().concat(super.getUserFilesPath(request));
}
}
一看大家就明白了,就是request.getContextPath()得到的项目名称,那就好办了。也不必做太大的改变,我们只需要写一个类去覆盖原来的
那个ContextPathBuilder类即可,所以就有了MyContextPathBuilder,代码如下:
package net.fckeditor.requestcycle.impl;
import javax.servlet.http.HttpServletRequest;
public class ContextPathBuilder extends ServerRootPathBuilder
{
public String getUserFilesPath(HttpServletRequest request)
{
return super.getUserFilesPath(request);
}
}
OK,搞定了