本来想发在论坛上,结果自己积分为0还无法在论坛上发帖了,就只能写在自己博客里。
以前对Fck只是了解,今天用几个小时研究了一下它的配置和Java代码,发现FCKeditor.Java 2.5版本里对权限、路径等操作都很简单(以前没有自己看过,不知道以前版本的情况,呵呵)。
以下是三个自己写的类:
1.自定义路径,适用于博客、论坛,每个用户可以有一个自己的目录,互不影响。
package net.fckeditor.requestcycle.impl;
import javax.servlet.http.HttpServletRequest;
import net.fckeditor.requestcycle.impl.ContextPathBuilder;
/**
* 2009-9-2
* @author PengFei
* 路径
*/
public class MyContextPathBuilder extends ContextPathBuilder {
@Override
public String getUserFilesPath(HttpServletRequest request) {
// TODO Auto-generated method stub
//在此可以根据从session中读取的用户名或者ID来对应其可以操作的目录
String s=super.getUserFilesPath(request)+"/user1path";
return s;
}
@Override
public String getUserFilesAbsolutePath(HttpServletRequest request) {
// TODO Auto-generated method stub
String s=super.getUserFilesAbsolutePath(request)+"/user1path";
return s;
}
}
2.权限管理,返回一个用户是否有新建文件夹、浏览服务器上的文件、上传文件的权限
package net.fckeditor.requestcycle.impl;
import javax.servlet.http.HttpServletRequest;
import net.fckeditor.requestcycle.UserAction;
/**
* 2009-9-2
* @author PengFei
* 此类可以从session中读取用户信息,判断是否有权限进行相关操作
*/
public class MyEnabledUserAction implements UserAction {
//权限--新建文件夹
public boolean isCreateFolderEnabled(HttpServletRequest request) {
// TODO Auto-generated method stub
return true;
}
//权限--浏览服务器上的文件列表
public boolean isEnabledForFileBrowsing(HttpServletRequest request) {
// TODO Auto-generated method stub
return true;
}
//权限--上传文件
public boolean isEnabledForFileUpload(HttpServletRequest request) {
// TODO Auto-generated method stub
return true;
}
}
3.文件重命名控制
package net.fckeditor.connector.impl;
import java.io.InputStream;
import net.fckeditor.connector.exception.InvalidCurrentFolderException;
import net.fckeditor.connector.exception.WriteException;
import net.fckeditor.handlers.ResourceType;
/**
* 2009-9-2
* @author PengFei
* 文件上传的操作在ContextConnector类中,这里只是对其进行重命名操作,其实完全可以重新自己写上传的代码
*/
public class MyContextConnector extends ContextConnector {
//此方法中可以对文件重命名
@Override
public String fileUpload(ResourceType type, String currentFolder,
String fileName, InputStream inputStream)
throws InvalidCurrentFolderException, WriteException {
// TODO Auto-generated method stub
fileName=fileName;//重命名操作在这里进行
return super.fileUpload(type, currentFolder, fileName, inputStream);
}
}
当然还有其他一些配置,都可以通过继承和重写原有的类来实现。
注意有个配置文件不要忘记,src下的fckeditor.properties,根据以上我自定义的三个类,这里是这样配置的:
connector.userActionImpl=net.fckeditor.requestcycle.impl.MyEnabledUserAction
connector.userPathBuilderImpl=net.fckeditor.requestcycle.impl.MyContextPathBuilder
connector.impl=net.fckeditor.connector.impl.MyContextConnector
当然还有其他配置,如果自己写的,就要在这里配置。详细见net.fckeditor.handlers包下的PropertiesLoader类,在载入的时候会先在fckeditor.properties中查询有无配置,如果有则使用,无则使用net.fckeditor.handlers包下的default.properties文件中的配置。配置的写法都可参照default.properties。
总结一下java web项目中使用FckEditor的步骤:
1.加入fckeditor的文件夹到ROOT目录下,以供网页调用
2.加入jar文件到lib下,2.5版本的demo里是6个jar,都在我的附件里有
3.web.xml中加入配置:
<servlet>
<description>FCKeditor Demo</description>
<servlet-name>ConnectorServlet</servlet-name>
<servlet-class>
net.fckeditor.connector.ConnectorServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>ConnectorServlet</servlet-name>
<url-pattern>/fckeditor/editor/filemanager/connectors/*</url-pattern>
</servlet-mapping>
注意这个配置可以不做任何修改,如果是PHP或者ASP,它们的文件上传方法是写在页面中,而页面是放在/ckeditor/editor/filemanager/connectors/目录下。如果第一步中的fckeditor不是直接在ROOT下放置,则这里的路径要做相应的修改。这个servlet类也是非常简单,大家如果重写了这个类,那这里也要对应修改。
4.页面调用(有好几种方法,官方的JSP页面都有例子)。fckconfig.js里配置网上一搜一大堆,这里就不说了。
附上2.5版本官方demo中的JSP文件,自己只写了三个类,外加修改了一个配置文件,希望对大家有用。