在ASP.NET项目中使用CKEditor +CKFinder实现图片上传功能

前言

之前的项目中一直使用的是FCKeditor,昨天突然有个想法:为什么不试一下新的CKEditor呢?于是花了大半天的时间去学习它的用法,现在把我的学习过程与大家分享一下。

谈起FCKeditor,相信没几个Web程序员不知道的吧。不过,官方已经停止了该产品的更新,其最新版是2.6.6,于2010年2月15日发布。

取代FCKeditor的产品叫CKEditor(Content And Knowledge Editor),与其说是对FCKeditor的升级,不如说是全新的一个产品。相比FCKeditor,其加载速度更快,功能更强大,更丰富的插件和API,更友好的界面,生成的html更标准化。我们先一睹它的风采吧。

它与FCKeditor最大的一个区别是CKEditor不集成文件上传与管理功能(乍一看到,心里瓦凉瓦凉的),这部分被独立出来放到另一个产品CKFinder中,这是一个商业授权的产品。CKEditor + CKFinder 两者结合起来才算一个完整的在线编辑器,所以我会把它们的配置放到一起,毕竟两者是缺一不可的。接下来我们看看如何在项目中使用它们吧。

(一)  下载和部署

目前CKEditor最新版为3.6.1,于2011-6-16发布。官方下载地址:http://ckeditor.com/download。

CKEditor.NET,最新版为3.6.1,于2011-6-17发布,这是CKEditor的.Net的源码项目。 官方下载地址:http://ckeditor.com/download,请选择ASP.NET版下载。

CKFinder的最新版为2.0.2.1,于2011-4-19发布。官方下载地址:http://ckfinder.com/download,请选择ASP.NET版本下载。

分别解压下载下来的这3个文件,并把解压后的ckeditor_3.6.1和ckfinder_aspnet_2.0.2.1文件夹拷贝到你的项目中(解压出来后的文件夹原本是ckeditor和ckfinder,但我更习惯把他们的版本号也加上去,方便项目后期的追踪),把“ckeditor_aspnet_3.6.1\bin\Release\CKEditor.NET.dll”和“ckfinder_aspnet_2.0.2.1\bin\Release\CKFinder.dll”这两个文件拷贝到网站根目录下的bin文件夹中,下面是部署后的目录结构图。

注意:

1. 不要拷贝ckfinder_aspnet_2.0.2.1下的_source(源代码项目)和bin文件夹,否则将导致无法成功编译你原来的项目。

2. 你可以把CKEditor和CKFinder放到你喜欢的任意目录中,然后正确配置他们的基路径(接下来就会说到),这丝毫不影响使用。

(二)  配置和使用

CKFinder的必要配置

打开/editor/ckfinder_aspnet_2.0.2.1/ config.ascx文件,完成验证逻辑(非常重要)、设置文件保存路径。

view plain
  1. public override bool CheckAuthentication() 
  2.     // WARNING : DO NOT simply return "true". By doing so, you are allowing 
  3.     // "anyone" to upload and list the files in your server. You must implement 
  4.     // some kind of session validation here. Even something very simple as... 
  5.     // 
  6.     //      return ( Session[ "IsAuthorized" ] != null && (bool)Session[ "IsAuthorized" ] == true ); 
  7.     // 
  8.     // ... where Session[ "IsAuthorized" ] is set to "true" as soon as the 
  9. // user logs on your system. 
  10. //重视上面这段话,在用户试图管理文件前,你必须在这里验证用户是否有权限操作, 
  11. //比如检查用户是否登录了,等等。如果验证成功,返回true, 
  12. //否则返回false以拒绝此操作。 
  13. //如果你直接返回true,这将是非常危险的,任何一个人,只要知道你ckfinder的路径, 
  14. //都可以随意上传或者删除文件,这将是毁灭性的 
  15.  
  16.     //return false; 
  17.     return true
  18.  
  19. /**
  20. * All configuration settings must be defined here.
  21. */ 
  22. public override void SetConfig() 
  23.     // Paste your license name and key here. If left blank, CKFinder will 
  24.     // be fully functional, in Demo Mode. 
  25.     LicenseName = ""
  26.     LicenseKey = ""
  27.  
  28.     // The base URL used to reach files in CKFinder through the browser. 
  29. BaseUrl = "/ckfinder/userfiles/";   //在这里指明你想把上传的文件放到哪里 
  30. // The phisical directory in the server where the file will end up. If 
  31. // blank, CKFinder attempts to resolve BaseUrl. 
  32. BaseDir = ""
  33.  
  34. //后面还有代码 
  35. //... 

接下来,你可以通过以下3种方式使用CKEditor,使用哪一种取决于你的偏好和习惯。

方式1 控件加载法

这是在.Net环境下最简便的方式,对于习惯了拖控件的同志们来说,这是最好的方式,推荐使用。

1. 添加CKEditorControl控件

在Visual Studio左侧的工具箱中点击右键,在弹出的菜单中选择“选择项(I)…”①菜单,将弹出选择工具箱项窗口,点击“浏览”按钮②在你网站根目录的Bin文件夹中找到刚刚添加的CKEditor.NET.dll③,一路点确定完成。你会发现工具箱里多了一个叫“CKEditorControl”的控件,没错,那个就是我们需要的CKEditor编辑器控件。

2. 添加dll引用

右键点击你的Web项目,选择“添加引用(R)…”菜单,找到之前拷贝进来的CKEditor.NET.dll和CKFinder.dll,点击“确定”按钮完成操作,见下图。

3. 还等什么,赶快试用吧

双击该控件或直接把该控件拖放到你的aspx页面中,并配置CKEditor的基路径BasePath。

view plain
  1. <CKEditor:CKEditorControl ID="CKEditorControl1" runat="server"  
  2. BasePath="/editor/ckeditor_3.6.1/"></CKEditor:CKEditorControl> 

说明:若你的CKEditor放在根目录的ckeditor文件夹中,你无需配置BasePath属性,直接把控件拖到页面中就能正常使用,CKEditor将自动搜索该路径。CKFinder的默认基路径为根目录下的ckfinder。下面提到的基路径配置规则与此相同。

后台代码,必须创建一个CKFinder并绑定到CKEditor上,以使用文件上传与管理功能。

view plain
  1. protected void Page_Load(object sender, EventArgs e) 
  2.     CKFinder.FileBrowser fileBrowser = new CKFinder.FileBrowser(); 
  3.     fileBrowser.BasePath = "/editor/ckfinder_aspnet_2.0.2.1/"//设置CKFinder的基路径 
  4.     fileBrowser.SetupCKEditor(CKEditorControl1); 

恭喜你,你已经学会了CKEditor的使用方法,运行页面去体验一下吧。

方式2 使用官方原始的JavaScript方式加载

1. 必要的配置

打开/editor/ckeditor_3.6.1/config.js,配置CKEeditor的基路径,如下:

view plain
  1. CKEDITOR.editorConfig = function( config ) 
  2.     // Define changes to default configuration here. For example: 
  3.     // config.language = 'fr'; 
  4.     // config.uiColor = '#AADC6E';   
  5.     basePath = '/editor/ckeditor_3.6.1/';   //配置CKEditor的根路径 
  6.  
  7. }; 

2. 使用

首先在页面中引入CKEditor和CKFinder的js文件。

view plain
  1. <script src="/editor/ckeditor_3.6.1/ckeditor.js" type="text/javascript"></script> 
  2. <script src="/editor/ckfinder_aspnet_2.0.2.1/ckfinder.js" type="text/javascript"></script> 

初始化代码,以下两种方式都可以完成初始化。

view plain
  1. <!--方式1--> 
  2. <textarea id="content" name="content" class="ckeditor"><%=Request.Form["content"] %></textarea> 
  3. <script type="text/javascript"> 
  4.     //绑定CKFinder到当前编辑器中,第二个参数指定CKFinder的路径 
  5.     CKFinder.setupCKEditor(null, '/editor/ckfinder_aspnet_2.0.2.1/'); 
  6. </script> 
  7.  
  8. <!--方式2--> 
  9. <textarea id="content" name="content"><%=Request.Form["content"] %></textarea> 
  10. <script type="text/javascript"> 
  11.     //在id为content的textarea处创建一个编辑器 
  12.     var editor = CKEDITOR.replace('content');  
  13.     //绑定CKFinder到当前编辑器中,第二个参数指定CKFinder的路径 
  14.     CKFinder.setupCKEditor(editor, '/editor/ckfinder_aspnet_2.0.2.1/');  
  15. </script> 

 

聪明的你一定注意到了,第一种初始化代码并没有显式创建编辑器,textarea拥有css类名“ckeditor”而第二种没有。默认情况下,CKEditor会把页面中所有拥有css类名为“ckeditor”的textarea都创建为编辑器,你可以亲自试一下。

 

方式3 通过官方的jQuery适配器加载

首先引入必要的js

view plain
  1. <script src="/js/jquery/jquery-1.6.2.js" type="text/javascript"></script> 
  2. <script src="/editor/ckeditor_3.6.1/ckeditor.js" type="text/javascript"></script> 
  3. <!--注意 适配器js必须放在ckeditor.js后面,否则将会出错,因为适配器需要引用ckeditor.js里面定义的类--> 
  4. <script src="/editor/ckeditor_3.6.1/adapters/jquery.js" type="text/javascript"></script> 
  5. <script src="/editor/ckfinder_aspnet_2.0.2.1/ckfinder.js" type="text/javascript"></script> 

编写初始化代码

view plain
  1. <textarea id="content" name="content"><%=Request.Form["content"] %></textarea> 
  2. <script type="text/javascript"> 
  3.     $(function() { 
  4.         //利用jQuery加载 
  5.         $('#content').ckeditor(); 
  6.         //绑定CKFinder到当前编辑器中,第二个参数指定CKFinder的路径 
  7.         CKFinder.setupCKEditor(null, '/editor/ckfinder_aspnet_2.0.2.1/'); 
  8.     }); 
  9. </script> 

(三) 精简你的CKEditor

解压后的CKEditor文件夹占用空间7M多,还是挺大的,让我们把没必要的东西清理一下吧,我的Editor我做主。

_samples:里面放的是示例,删除。

_source:存放的是开发用的源文件,不需要,删除。

adapters:如果你不使用jQuery方式来初始化CKEditor(上面的第3种方式),可以删除。

images:必要的文件,保留。

plugins:存放的是插件,有一些是CKEditor必须使用的,全部保留吧。

lang:里面放的是语言文件,保留_languages.js、zh-cn.js和en.js这3个文件,其它全部删除。

themes:必要的文件,保留。

skins:存放的是皮肤文件,默认的皮肤是kama,其它两个觉得用不到的话可以直接删除。

删除CKEditor根目录下的.htaccess、CHANGES.html、ckeditor.asp、ckeditor.pack、ckeditor.php、ckeditor_basic.js、ckeditor_basic_source.js、ckeditor_php4.php、ckeditor_php5.php、ckeditor_source.js和INSTALL.html共11个文件。

以下是清理前后的对比:

(四) CKFinder版权的破解

CKFinder要商业授权才能使用的,未授权时在使用中会跳出一些版本信息,虽然不影响正常使用,但不喜欢的可以把它去掉,破解的版本为2.0.2.1,其它版本可能会不同。

注意:此方法仅供个人学习用,请不要在商业中使用!

打开CKFinder下的ckfinder.js文件,搜索“message_content”(不包括双引号),会找到以下片段:<h4 class='message_content' '></h4>,批发它 改为<h4 class='message_content' style='display:none;'></h4>,让它隐藏。

搜索“\x3c\144\x69\x76\040\143\x6c\x61\163\x73\075\x27\166\x69\x65\x77\040\x74\x6f\157\154\137\160\141\x6e\145\154\047\040\x73\164\x79\154\x65\075\047\x64\x69\163\160\x6c\141\x79\x3a\040\142\154\x6f\x63\153\x20\041\151\155\160\x6f\162\164\141\156\164\x3b\040\160\157\163\x69\x74\x69\157\x6e\x3a\040\163\164\x61\164\x69\143\x20\x21\x69\x6d\160\157\x72\x74\141\156\164\x3b\x20\x63\157\154\x6f\x72\x3a\x20\x62\x6c\141\x63\153\x20\041\x69\155\160\157\x72\164\141\x6e\x74\x3b\x20\x62\141\x63\153\147\162\x6f\165\x6e\144\055\x63\157\154\x6f\x72\072\040\x77\x68\x69\164\145\x20\041\151\x6d\x70\157\162\164\141\156\164\073\x27\x3e\x54\150\151\163\x20\151\x73\x20\x74\150\x65\x20\x44\x45\115\117\040\x76\145\162\163\151\x6f\x6e\040\x6f\x66\x20\x43\113\x46\x69\x6e\144\x65\x72\x2e\040\x50\154\145\141\x73\x65\040\166\151\163\x69\x74\040\x74\x68\x65\040\x3c\x61\x20\150\162\145\x66\075\x27\x68\164\x74\160\x3a\057\057\143\153\146\x69\156\x64\x65\x72\x2e\143\157\x6d\x27\x20\164\x61\x72\x67\x65\164\075\x27\137\142\154\141\156\153\047\x3e\103\113\106\151\x6e\x64\145\162\x20\x77\x65\142\040\x73\151\x74\145\074\x2f\141\x3e\x20\164\157\040\157\x62\x74\x61\151\x6e\x20\x61\x20\x76\x61\154\151\144\x20\x6c\151\x63\x65\x6e\163\145\x2e\074\057\144\x69\x76\076”(不包括双引号),把这一串字符改为“\x20”。

其实上面那些符号都是JavaScript的转义字符,其对应的是“<div class='view tool_panel' style='display: block !important; position: static !important; color: black !important; '>This is the DEMO version of CKFinder. Please visit the <a href='http://ckfinder.com' target='_blank'>CKFinder web site</a> to obtain a valid license.</div>”,即左下角那些文字。

后记

以上仅仅是CKEditor的基本用法,基本上能满足一般的需要。要想真正了解并用好它,还得下一番苦功夫。试用后感觉很不错,特别是官方的API文档,很详细很给力。

官方文档:http://docs.cksource.com/

转载于:https://www.cnblogs.com/yongzhengye/p/4218091.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/292057.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux之内核剖析

Linux 内核简介 现在让我们从一个比较高的高度来审视一下 GNU/Linux 操作系统的体系结构。您可以从两个层次上来考虑操作系统&#xff0c;如图 2 所示。 图 2. GNU/Linux 操作系统的基本体系结构 上面是用户&#xff08;或应用程序&#xff09;空间。这是用户应用程序执行的地…

linux笔记 3-4 SMTP,.配置电子邮件传输

***************4.配置电子邮件传输*****************##1.基本电子邮件配置##配置dns服务&#xff0c;添加MX记录两台服务器分别配置 /etc/postfix/main.cf文件myhostname--主机名mydomain--域名myorigin--重写本地发布的电子邮件,使其显示为来自该域。这样有助于确保响应返回入…

希尔排序算法的实现

希尔排序(Shell Sort)是插入排序的一种&#xff0c;它是针对直接插入排序算法的改进。该方法又称缩小增量排序&#xff0c;因DL&#xff0e;Shell于1959年提出而得名。 希尔排序实质上是一种分组插入方法。它的基本思想是&#xff1a;对于n个待排序的数列&#xff0c;取一个小于…

linux c之信号signal处理机制

最近同事的程序设计过程中用到了Linux的signal机制&#xff0c;从而引发了我对Linux中signal机制的思考。Signal机制在Linux中是一个非常常用的进程间通信机制&#xff0c;很多人在使用的时候不会考虑该机制是具体如何实现的。signal机制可以被理解成进程的软中断&#xff0c;因…

技术分享 | 微服务模式下如何高效进行API测试

导读&#xff1a;微服务架构下&#xff0c;API 测试的最大挑战来自于庞大的测试用例数量&#xff0c;以及微服务之间的相互耦合。基于这种挑战&#xff0c;如何进行高效的API测试&#xff0c;选择什么样的方式就比较重要&#xff0c;此文主要是采用契约测试的方法来对微服务模式…

由CloudStack项目引起的ESXI嵌套虚拟化引起的二级虚拟机无法被访问

关于这个问题&#xff0c;主要以文字描述为主&#xff0c;最终解决方法其实就一个步骤。问题描述&#xff1a;某客户需要部署某企业的云平台&#xff0c;但是由于年前没有足够的物理机资源&#xff0c;所以提供的资源均为虚拟机&#xff0c;现在让我们做技术评估。其实观察整个…

美女的床真的好难爬......

1 地中海式茂密&#xff1f;▼2 阴着呐▼3 拜拜了您呐▼4 草莓从哪里来▼5 爷青结系列▼6 没点才艺还住不了酒店了▼7 美女的床果真很难爬(真从500平大床中醒来)▼8 数学能有多有趣▼你点的每个赞&#xff0c;我都认真当成了喜欢

控制器方法错误处理

错误处理一直是开发维护阶段需要重点关注的一块&#xff0c;控制器中方法原则上都需要处理错误。 1、添加BaseController 路径&#xff1a;nweb\src\main\java\com\nankang\cati\nweb\controller\BaseController.java 所有的控制器都继承BaseController 2、使用&#xff1a; 1&…

EF Core 6 新功能汇总(一)

在这篇文章中&#xff0c;你将看到 EF Core 6 中的十个新功能&#xff0c;包括新的特性标注&#xff0c;对时态表、稀疏列的支持&#xff0c;以及其他新功能。1Unicode 特性在 EF Core 6.0 中&#xff0c;新的 UnicodeAttribute 允许你将一个字符串属性映射到一个非 Unicode 列…

DS5020配置集群存储

一、方案设计 计划给某公司服务器制作集群&#xff0c;存储划分大致如下&#xff1a; 1、 将存储磁盘制作为raid5&#xff1b; 2、 划分两个Storage Partition给两类集群使用&#xff0c;一类为数据库服务&#xff0c;一类为各种应用服务 二、存储的连接 1、存储的简介 Serial …

RequireJS首次加载偶尔失败

现象&#xff1a;第一次加载JS文件&#xff0c;首次加载偶尔失败&#xff1b; 原因&#xff1a;require([jquery, operamasks, zTree, jQueryCookie]&#xff0c;中前后引用同步加载&#xff1b; 解决方式&#xff1a;shim声明前置加载&#xff1b; 配置如下&#xff1a; requi…

linux之file命令总结

解释&#xff1a; file是通过查看文件的头部内容&#xff0c;来获取文件的类型使用file命令可以知道某个文件究竟是二进制&#xff08;ELF格式&#xff09;的可执行文件, 还是Shell Script文件&#xff0c;或者是其它的什么格式。 file能识别的文件类型&#xff1a;目录、Shel…

优化.NET 应用程序 CPU 和内存的11 个实践

https://michaelscodingspot.com/cpu-bound-memory-bound/优化.NET 应用程序 CPU 和内存的11 个实践凡事都有其限度&#xff0c;对吧&#xff1f;汽车只能开这么快&#xff0c;进程只能使用这么多内存&#xff0c;程序员只能喝这么多咖啡。我们的生产力受到资源的限制&#xff…

陈省身:三角形内角和不等于180°

全世界只有3.14 % 的人关注了爆炸吧知识三角形外角和为360作为公认的劳模&#xff0c;平日里&#xff0c;超模君不但要码字&#xff0c;工作之余还要监督表妹做作业&#xff0c;也难怪表妹成绩总是能名列前茅。今天表妹做作业时&#xff0c;遇到一道判断题&#xff1a;“三角形…

跟我学PHP第二篇- 配置Mysql以及PHP WampServer篇(1)

大家好&#xff0c;昨天我给大家介绍了如何去安装ZEND STUDIO&#xff0c;下面昨天文章的链接&#xff1a; http://www.cnblogs.com/kmsfan/p/zendStudio.html 本节为配置的第一部分&#xff0c;还没有讲完全部&#xff0c;因为个人工作比较忙&#xff0c;没有一整天时间写博客…

linux之查看文件大小和磁盘大小总结

1 、查看文件大小 使用du命令,查看该目录以及子目录文件的大小 du -h 如果只需要快速查看这个目录占用大小&#xff0c;可用下面命令 du -sh 比如我们查看xiaoyun这个文件大小 2、查看电脑磁盘大小 使用下面命令 df -h 效果如下图 很明显系统装载/dev/sda2下

YARP(Yet Another Reverse Proxy)是使用 .NET 构建的高度可定制的反向代理

点击上方蓝字关注我们&#xff08;本文阅读时间&#xff1a;16分钟)YARP 1.0已经发布了&#xff0c;现在可以从 NuGet 下载。YARP&#xff08;Yet Another Reverse Proxy&#xff09;是使用 .NET 构建的高度可定制的反向代理。YARP 与其他反向代理的最大区别在于它是如何构建和…

电影院里为何有散落的青瓜?

1 摄像头&#xff1a;你套个袋子我就认不出来了吗&#xff1f;▼2 路边惊现大熊猫&#xff01;&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼3 好一个驼小姐&#xff08;via.豆瓣社死小组满杯草莓&#xff09;▼4 学弟的理解也不是无迹可寻▼5 台湾人过生日的方…