前言

FCKeditor是使用非常广泛的HTML编辑器,本文从 ASP.NET 的使用场景对 FCKeditor 与 FCKeditor.NET 的配置、功能扩展(如自定义文件上传子目录自定义文件名上传图片的后期处理等)、以及安全性进行初步的阐述。

希望能帮助有同样需求的同仁节省一点时间;也希望各位能指正其中的不足。谢谢。

一、自定义 FCKeditor 的 BasePath

BasePath 即FCKeditor在网站中的相对路径,默认值是 /fckeditor/,最好在Web.config appSettings中对其进行配置:

<add key="FCKeditor:BasePath" value="/FCKeditor_2.6.3/"/>

这样做有诸多优点:

  1. 开发环境与生产环境不同,开发环境一般是http://localhost/xxx.com/这种情况下FCKeditor就得放在一个虚拟目录http://localhost/fckeditor/中,若涉及多个网站的开发,而各网站的FCKeditor有差别时,这样显然不是最优;
    而且因为物理目录结构与逻辑目录结构不同,也会有发生错误的隐患;
    而如果采用Web.config的配置,就可以在开发环境采用不同的配置,FCKeditor的物理路径与生产环境保持一致;
  2. 当升级FCKeditor时,只需要将新版本的FCKeditor放在相应版本号的目录里,修改一下配置即可。这样可以解决因为静态资源的客户端缓存问题,不同用户出现不同的错误的问题;
  3. 可以直观地看到自己的FCKeditor的版本号。

二、配置文件上传的目录

FCKeditor的文件上传(如图片上传)目录可以通过Web.config appSettings进行配置,如:

<add key="FCKeditor:UserFilesPath" value="/UploadFile/FCKeditor/"/>

也可以在 /FCKeditorBasePath/editor/filemanager/connectors/aspx/config.ascx 中进行配置,但我建议 FCKeditor 目录中的内容能不改就不改(fckconfig.js除外),这样日后升级可以放心地替换即可。

三、自定义文件上传的子目录的格式

我们知道,一个文件夹下面不能存放过多的文件(据称Windows下面的目录下2000为阈值),否则对该目录的访问会严重影响I/O性能。而FCKeditor的文件存储是在单一的一个目录进行的。我对FCKeditor进行了扩展,可以在Web.config appSettings对存储目录的格式自定义,如:

<add key="FCKeditor:FolderPattern" value="%y/%m-%d/"/>

========================================
以今天的日期为例:这样产生的文件上传子目录格式为:2008/10-21/。
年月日格式的目录可以随意组合,如:

<add key="FCKeditor:FolderPattern" value="%y/%m/%d/"/>

这样产生的文件上传子目录变成了2008/10/21/

========================================
还可以针对不同登录的用户,采用不同的上传子目录
Web.config 修改上传子目录的配置,增加%u表示不同用户使用基于其标识不同的上传子目录

<add key="FCKeditor:FolderPattern" value="%u/%y/%m/%d/"/>

FCKeditor_2.6.3\editor\filemanager\connectors\aspx\config.ascx 中增加获取当前登录用户标识的逻辑

public override void SetConfig()
{#region Bochuh's Modification // Identifier for logined user // Leave blank for default user upload folder LoginedUserIdentifier = "44"; // 这里替换成获取当前登录用户表示的代码#endregion

// ……此文件中原来的代码}

这样可以对不同用户,根据其登录后的标识(一般是用户ID),来使用不同的目录进行存储,如:7394/2008/10/21/(7394是当前登录用户的ID)

参考:

  • %u   代表 当前登录用户的标识
  • %y    代表 当前时间的年份
  • %m    代表 当前时间的月份
  • %d    代表 当前时间的日

四、自定义文件上传的文件名格式

FCKeditor对文件名的处理规则是:如果当前目录下没有重名文件,则上传后的文件名与用户PC上的文件名一致;若存在n个重名文件,则加入用户PC上的文件名是Example.xxx,上传后的文件名变为:Example(n).xxx

我的项目里要求对用户上传的文件名变成Guid的格式,所以我对FCKeditor也做了扩展,在Web.config appSettings可以对上传后文件的格式自定义,如:

<add key="FCKeditor:FilenamePattern" value="%guid.%extl"/>

这样的文件名如:a299e63a-7d2d-493d-bbb9-99162ef5b6b8.gif

参考:

  • %guid    代表 一个新的guid字符串
  • %fnl    代表 源文件名的小写
  • %fnu    代表 源文件名的大写
  • %extl    代表 源文件扩展名的小写
  • %extu    代表 源文件扩展名的大写

五、对上传图片进行缩放处理

用到FCKeditor图片上传功能的场景中,很多是内容的发表。内容中往往不需要几千像素大小的图片,比如我的项目中,文章区域最宽也就560像素,所以我做了一个扩展,在Web.config appSettings中可以对图片的最大宽度进行自定义:

<add key="FCKeditor:MaxWidthOfUploadedImg" value="560"/>

有了这段配置,上传后的图片的宽度都控制在了560像素及以内

六、自定义上传后图片URL中的域名

为了加快页面的渲染,我们可以把图片等静态资源放在一个独立的域名当中。但FCKeditor默认的图片上传后URL是相对路径,如图:

我增加了这个扩展,在Web.config appSettings可以配置上传后图片URL的域名,如:

<add key="FCKeditor:UploadedFilesDomain" value="http://a.cvimg.cn/"/>

如图:

七、解决上传文件名含有中文的文件时提示 "invalid file type" 的问题

这个问题只需要在Web.config中增加一段配置即可解决:

<location path="FCKeditor_2.6.3/editor/filemanager/connectors/aspx/upload.aspx">
    <system.web>
        <globalization requestEncoding="utf-8" responseEncoding="gb2312"/>
    </system.web>
</location>

注意:

  1. responseEncoding是网站的默认编码
  2. FCKeditor_2.6.3是FCKeditor的BasePath

八、FCKeditor的安全性

在FCKeditor的2.3.2版本里,曾有一个漏洞,可以通过 /editor/filemanager/browser/default/connectors/aspx/connector.aspx 往服务器上传任意文件,我的网站就曾经中招。

2.6.3虽然暂未发现类似的问题,但一般情况下用不到的文件最好还是删除比较好:

  1. FCKeditor BasePath 根目录中除了保留:

    1. /editor
    2. /fckconfig.js
    3. /fckpackager.xml
    4. /fckstyles.xml
    5. /fcktemplates.xml
    6. /license.txt

    外,全部删除

  2. /editor/filemanager/中除了保留:
    1. /connectors/aspx/config.ascx
    2. /connectors/aspx/upload.aspx

    外,全部删除

  3. 删除 /editor/_source/
  4. /editor/filemanager/connectors/aspx/config.ascx 的 CheckAuthentication() 方法中,增加验证用户是否登录的逻辑

注意:以上措施仅适用于ASP.NET的网站,其他语言版本的网站未考虑。

附:基于FCKeditor.Net_2.6.3修改后的源码

SOURCE: http://files.cnblogs.com/zhubo/FCKeditor.Net_2.6.3_20090713.zip
BIN(.NET 2.0): http://files.cnblogs.com/zhubo/FredCK.FCKeditorV2_20090713.zip

  1. 对以下文件的指定行进行了修改,
    /FileBrowser/Config.cs  line 45, 116, 169
    /FileBrowser/FileWorkerBase.cs  line 68, 98, 110, 125, 278
  2. 所有修改的地方均包含在名为 "ZhuBo's Modification" 的代码块中,也可以通过搜索整个项目中的 "ZhuBo's Modification" 快速看到改动的地方,方便自己的扩展(比如可以设定图片的最大高度)

更新 at 2008-11-11

新增可选的根据用户标识让不同用户使用独自的图片上传子目录,参见上文中“三、自定义文件上传的子目录的格式”的更新部分。

新的源码与dll文件也已更新。

更新 at 2009-07-06

感谢新手中的新手的发现,修正了以下Bug:未配置FCKeditor:FolderPattern,或者FCKeditor:FolderPattern为空时,上传图片成功后的路径中多了一个"/"

更新 at 2009-07-13

图片后缀名为.gif的不做压缩处理,防止动画效果丢失。

http://www.cnblogs.com/zhubo/archive/2008/10/21/using_fckeditor_net.html

转载于:https://www.cnblogs.com/taizhouxiaoba/archive/2009/10/26/1589728.html

FCKeditor.NET的配置、扩展与安全性经验交流相关推荐

  1. IKAnalyzer配置扩展词库经验总结

    IKAnalyzer对于中文分词效果较好,但是在实际应用过程中经常会遇到分词效果不理想的情况,比如中文中夹杂的英文缩写,英文与数字混合(如软件版本号)等,这时就需要配置扩展词库.配置的主要方法为编辑I ...

  2. fckeditor组件使用---配置FCKeditor,以及使用方法2

    6.总结: 配置FCKeditor的方法:   a.直接修改主配置文件,fckconfig.js   b.定义单独的配置文件(只需要写修改的配置项,然后在fckconfig.js中引入)   c.在页 ...

  3. springboot中关于springMvc默认配置,配置扩展,全面接管

    1. apringMvc自动配置 springBoot整合springMVC时,提供了大量的自动化配置,相关的配置可查看org.springframework.boot.autoconfigure.w ...

  4. OpenCV配置(利用Source编译,并配置扩展库opencv_contrib)

    OpenCV配置(利用Source编译,并配置扩展库opencv_contrib) 1. 配置所需(以个人版本为准) 1.1 CMake下载 1.2 OpenCV Source下载 1.3 OpenC ...

  5. Packet Tracer - 配置扩展 ACL - 场景 1

    Packet Tracer - 配置扩展 ACL - 场景 1 拓扑图 地址分配表 设备 接口 IP 地址 子网掩码 默认网关 R1 G0/0 172.22.34.65 255.255.255.224 ...

  6. centos 系统软件包管理 yum 本地yum配置 扩展源epel rpm 清除yum缓存 yum provides */vim 第十节课...

    centos  系统软件包管理  yum 本地yum配置  扩展源epel  rpm  清除yum缓存  yum provides "*/vim"   第十节课 你不能保证可逆化操 ...

  7. 教育经验交流 - 我妻子在我闺女的毕业典礼上的演讲

    教育经验交流 赵冬平 受于老师之邀,我能够在这里与各位家长一起交流经验,不胜荣幸,其实经验谈不上,李天晓同学也没有大家想象的那样优秀,只不过是一白遮百丑,她的成绩稍微稳定些罢了.今天只是谈一谈我平时与 ...

  8. 计算机教师教学能手演讲,教学能手经验交流发言稿6篇

    教学经验教学规律教学质量传授知识中心任务教学改革教学原则培养能力出好人才.教学经验就是知道在黑板上写什么.有经验的老师认为重要的概念必须慢慢地写在黑板上,而不是仅仅在大屏幕上显示出来.在大屏幕上显示它 ...

  9. 杭电通信841考研考研经验交流及资料分享

    首先欢迎各位学弟学妹报考我们通信工程学院,下面我首先介绍一下通信工程学院的基本情况,然后再介绍一下各科的复试计划.希望对大家有所帮助.(杭电2020年通信工程考研资料分享及经验交流群:94512144 ...

最新文章

  1. Upload上传图片
  2. 俄罗斯方块新增行算法:不拘一格编程序之二
  3. C#调用百度地图 api
  4. SQLServer中的数据类型
  5. mysql sail_MySQL使用小记
  6. vnc 红帽linux安装教程,Linux(redhat\centos)下安装xrdp
  7. Python中numpy读取高维数组中特定的行,列
  8. sqlite bool mysql_MySQL/SQLite-数据库常用字段类型使用
  9. iOS TableView 使用详解
  10. android5.1使用SerialManagerService
  11. hive如何确定map数量和reduce数量?
  12. android 动画效果
  13. PS之PS 删除时出现无法完成请求,因为智能对象不能直接进行编辑。
  14. 仓库出入库管理系统32,excel表格系统,内含公式,只需登记出库入库即可
  15. win10 休眠设置无效_win10休眠设置无效的解决教程
  16. web前端开发工程师养成记
  17. 拼多多收php吗_拼多多果园助力PHP版可运行在云函数
  18. web开发要学习什么技术,HTML实体字符列表
  19. Python编程:从入门到退学(bushi)第二章
  20. 使用ip地址计算子网掩码的方法

热门文章

  1. 请问在JAVA编程中什么叫耦合?什么又叫解藕? 悬赏分:0 - 解决时间:2008-3-8 12:55...
  2. OneAPM NI 基于旁路镜像数据的真实用户体验监控
  3. Codeforces 437D 贪心+并查集
  4. leetcode - First Missing Positive
  5. 用cloud-zoom做一个仿淘宝的宝贝放大镜查看功能
  6. 安装docker-machine
  7. MySQL_存储过程
  8. 进度条小飞机移动动画
  9. 用css3和jquery实现的渐变的动态进度条
  10. ie6使用绝对定位position:absolute,box不显示