本来想发在论坛上,结果自己积分为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文件,自己只写了三个类,外加修改了一个配置文件,希望对大家有用。