时间:2014-10-17 09:47:17 来源: 复制分享
使用过FCKeditor的朋友肯定都知道,FCKeditor的文件上传的文件都是保存在自定义的目录下,而且保存的目录仅仅按照文件类型进行了划分,只有4个:file、flash、image和media(FCKeditor有内置的管理器可以自由建立文件夹,但是由于并不安全所以这块被我关闭掉了,用户所要做的事情就是上传),而实际的应用过程中我们不可能将这些同类型的文件放在一个文件夹下,我们需要有特殊的逻辑来存放,比如:新闻相关文件是按照月份来存放、博客资源是按照博主的用户名来存放等等,这时FCKeditor的基本上就满足不了我这个需求了,所以就需要研究FCKeditor的源码进行简单修改来达到我们的目的。
FCKeditor主要由2部分组成,一部分就是FCKeditor的HTML包,包含了JS、HTML页面主要负责与客户端的交互,而另一部分就是具体的C#程序集FredCK.FCKeditorV2。
其中FCKeditor的上传部分主要也分2个部分:
1、面向客户端UserControlconfig.ascx(存放于fckeditor\editor\filemanager\connectors\aspx\下)
2、服务器端负责上传的具体类:FredCK.FCKeditorV2.FileBrowser.Config.cs
一、.NET 配置
web.config
WebSite:虚拟目录名
在VS里是对的,但放到IIS中就不行了,因为IIS的虚拟目录不是WebSite了,所以要保证虚拟目录名不是固定死的,要适应随时变化。
IIS里配置:启用父路径
二、路径设置
1.相对应用路径
在属性文件fckeditor.properties中添加如下值
connector.userFilesPath=/app/11_fmss/jyjj/user_temp_files
connector.userFilesAbsolutePath=/app/11_fmss/jyjj/user_temp_files
这个样文件就会传到指定的这个路径下,相应的image、file系统自动添加。
知道看net.fckeditor.handlers.PropertiesLoader类就明白什么意思了。
2.肯能变化的相对路径
配置文件的写法
connector.userActionImpl=net.fckeditor.requestcycle.impl.UserActionImpl
connector.userPathBuilderImpl = cn.cpees.k_fmss.jyjj.service.FckeditorUserPath
这里不用指定路径,指定我们要定义的生产路径的类即可。
FckeditorUserPath类的写法
public class FckeditorUserPath implements UserPathBuilder{
public String getUserFilesAbsolutePath(HttpServletRequest request) {
return "/app/11_fmss/jyjj/user_temp_files/"+request.getSession(false).getAttribute("username")+"/"+DateUtil.currentDate();
}
public String getUserFilesPath(HttpServletRequest request) {
return "/app/11_fmss/jyjj/user_temp_files/"+request.getSession(false).getAttribute("username")+"/"+DateUtil.currentDate();
}
}
这个类是生产路径的类。
3.绝对路径。
默认情况下FCKeditor改变上传文件的路径只能在应用下面,而不能写绝对路径,如果设置绝对路径需要扩展FCKeditor,扩展的方法是首先改配置文件fckeditor.properties的改法
connector.userActionImpl=net.fckeditor.requestcycle.impl.UserActionImpl
connector.impl = net.fckeditor.connector.impl.LocalConnector //扩展connector,不能用默认的connector实现
connector.userPathBuilderImpl = cn.cpees.k_fmss.jyjj.fckeditor.FilePathBuilder//自定义userPathBuilderImpl 的扩展类
这个类要求实现UserPathBuilder接口以及他的方法
FilePathBuilder类的写法
import javax.servlet.http.HttpServletRequest;
import net.fckeditor.requestcycle.UserPathBuilder;
import cn.common.component.PathPool;
import cn.common.component.logger.LOG;
import cn.common.component.logger.LogFactory;
public class FilePathBuilder implements UserPathBuilder{
LOG log = LogFactory.getLogger(FilePathBuilder.class);
public String getUserFilesAbsolutePath(HttpServletRequest request) {
// return PathPool.getDownloadFilePath();
return "d:/file";
}
public String getUserFilesPath(HttpServletRequest tequest) {
//return PathPool.getDownloadFilePath();
return "d:/file";
}
}