ckeditor3.5.3+ckfinder for java 2.1.1,嵌入文本编辑器,实现上传文件

来源:互联网 发布:大嘴巴网络超市 编辑:程序博客网 时间:2024/05/20 05:59

准备工作 先把这两个东西加入项目,导相应的包,注意的是ckfinder的文件是官网上下载的ckfinder_java_2.1.1.jar解压后ckfinder/ckfinder.war(解压)/ckfinder这个文件夹 而不是直接解压出来见到的那个,是war的那个,这点搞了我半天。导的jar包路径: ckfinder_java_2.1.1\ckfinder\WEB-INF\lib;C:\Users\Administrator\Desktop\ckfinder_java_2.1.1\ckeditor\WEB-INF\lib

下面是需要显示的jsp关键代码:

 <script type="text/javascript" src="user/ckeditor/ckeditor.js" ></script>    <script type="text/javascript" src="user/ckfinder/ckfinder.js" ></script>//上面的代码在head里 下面的在body <textarea cols="80" id="content" name="content" rows="20">这里是默认值</textarea>       <script type="text/javascript">       var editor=CKEDITOR.replace("content");       CKFinder.SetupCKEditor(editor,'ckfinder/');       </script>


注意上面的细节,要不你的结局将和我一样 因为双引号和单引号搞一晚上,第一个 replace方法里的参数的textarea里的name属性,双引号

而后面的SetCKEditor这方法是用来设置ckfinder这文件夹处理上传这功能的,一个字母都不能错哦。

ckeditor这文件夹下的config.js是用来配置这编辑器的,代码如下:

CKEDITOR.editorConfig = function( config ){// Define changes to default configuration here. For example:// config.language = 'fr';// config.uiColor = '#AADC6E';config.language = 'zh-cn'; //设置中文语言 config.uiColor = '#AADC6E'; //编辑器颜色 config.font_names = '宋体;楷体_GB2312;新宋体;黑体;隶书;幼圆;微软雅黑;Arial;Comic Sans MS;Courier New;Tahoma;Times New Roman;Verdana';config.toolbar_Full = [[ 'Source', '-', 'Preview', '-', 'Templates' ],[ 'Cut', 'Copy', 'Paste', 'PasteText', 'PasteFromWord', '-','Print','SpellChecker', 'Scayt' ],[ 'Undo', 'Redo', '-', 'Find', 'Replace', '-', 'SelectAll','RemoveFormat' ],[ 'Form', 'Checkbox', 'Radio', 'TextField','Textarea', 'Select', 'Button', 'ImageButton', 'HiddenField' ],'/',[ 'Bold', 'Italic', 'Underline', 'Strike', '-', 'Subscript','Superscript' ],[ 'NumberedList', 'BulletedList', '-', 'Outdent', 'Indent','Blockquote', 'CreateDiv' ],[ 'JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock' ],[ 'Link', 'Unlink', 'Anchor' ],[ 'Image', 'Flash', 'Table', 'HorizontalRule', 'Smiley','SpecialChar', 'PageBreak' ], '/',[ 'Styles', 'Format', 'Font', 'FontSize' ],[ 'TextColor', 'BGColor' ],[ 'Maximize', 'ShowBlocks', '-', 'About' ] ];config.toolbar_Basic = [ [ 'Bold', 'Italic', '-', 'NumberedList','BulletedList', '-', 'Link', 'Unlink', '-', 'About' ] ];config.width = 700;config.height = 300;config.filebrowserBrowseUrl = 'user/ckfinder/ckfinder.html'; //上传文件时浏览服务文件夹config.filebrowserImageBrowseUrl = 'user/ckfinder/ckfinder.html?Type=Images'; //上传图片时浏览服务文件夹config.filebrowserFlashBrowseUrl = 'user/ckfinder/ckfinder.html?Type=Flash'; //上传Flash时浏览服务文件夹config.filebrowserUploadUrl = 'user/ckfinder/core/connector/aspx/connector.aspx?command=QuickUpload&type=Files'; //上传文件按钮(标签)config.filebrowserImageUploadUrl = 'user/ckfinder/core/connector/aspx/connector.aspx?command=QuickUpload&type=Images'; //上传图片按钮(标签)config.filebrowserFlashUploadUrl = 'user/ckfinder/core/connector/aspx/connector.aspx?command=QuickUpload&type=Flash'; //上传Flash按钮(标签)};

这里大家需要注意的是路径问题,尤其是最后那些url,注意的是单引号后没有/,因为在项目里,已经自动的加上了/,我见网上很多代码都是带/,经我测试都是404,

我这里是把ckeditor,ckfinder这两个文件夹放在user文件夹下面,如果你直接放根路径,去掉user/即可,注意不要以/开始。

下面是web.xml,配置,这里为了方便,我把代码全放上了,里面配了自定义的拦截器,这个最后再说。


<servlet><servlet-name>ConnectorServlet</servlet-name><servlet-class>com.ckfinder.connector.ConnectorServlet</servlet-class><init-param><param-name>XMLConfig</param-name><param-value>/WEB-INF/ckfinder-config.xml</param-value></init-param><init-param><param-name>debug</param-name><param-value>false</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>ConnectorServlet</servlet-name><url-pattern>             /user/ckfinder/core/connector/java/connector.java        </url-pattern></servlet-mapping><filter><filter-name>struts2</filter-name><!--<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>--><filter-class>com.free.filter.FCKFilter</filter-class></filter><filter>  <filter-name>FileUploadFilter</filter-name>       <filter-class>com.ckfinder.connector.FileUploadFilter</filter-class>     <init-param>                       <param-name >sessionCookieName</param-name>                       <param-value >JSESSIONID</param-value >                   </init-param >                   <init-param >                       <param-name >sessionParameterName</param-name>                       <param-value >jsessionid</param-value>                   </init-param > </filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>


FCKFilter这类是自定义的拦截器,上面的配置中还写明了从/WEB-INFO/ckfinder-config.xml中加载配置,这个名字可以随意起,只要系统能找到就行。
ckfinder-config.xml:
<config><enabled>true</enabled><baseDir></baseDir><baseURL>MyBlog/userfiles</baseURL><licenseKey></licenseKey><licenseName></licenseName><imgWidth>1600</imgWidth><imgHeight>1200</imgHeight><imgQuality>80</imgQuality><uriEncoding>UTF-8</uriEncoding><forceASCII>false</forceASCII><userRoleSessionVar>CKFinder_UserRole</userRoleSessionVar><checkDoubleExtension>true</checkDoubleExtension><checkSizeAfterScaling>true</checkSizeAfterScaling><secureImageUploads>true</secureImageUploads><htmlExtensions>html,htm,xml,js</htmlExtensions><hideFolders><folder>.svn</folder><folder>CVS</folder></hideFolders><hideFiles><file>.*</file></hideFiles><defaultResourceTypes></defaultResourceTypes><types><type name="Files"><url>%BASE_URL%files/</url><directory>%BASE_DIR%files</directory><maxSize>10m</maxSize><allowedExtensions>7z,aiff,asf,avi,bmp,csv,doc,docx,fla,flv,gif,gz,gzip,jpeg,jpg,mid,mov,mp3,mp4,mpc,mpeg,mpg,ods,odt,pdf,png,ppt,pptx,pxd,qt,ram,rar,rm,rmi,rmvb,rtf,sdc,sitd,swf,sxc,sxw,tar,tgz,tif,tiff,txt,vsd,wav,wma,wmv,xls,xlsx,zip</allowedExtensions><deniedExtensions></deniedExtensions></type><type name="Images"><url>%BASE_URL%images/</url><directory>%BASE_DIR%images</directory><maxSize>2m</maxSize><allowedExtensions>bmp,gif,jpeg,jpg,png</allowedExtensions><deniedExtensions></deniedExtensions></type><type name="Flash"><url>%BASE_URL%flash/</url><directory>%BASE_DIR%flash</directory><maxSize>20m</maxSize><allowedExtensions>swf,flv</allowedExtensions><deniedExtensions></deniedExtensions></type></types><accessControls><accessControl><role>*</role><resourceType>*</resourceType><folder>/</folder><folderView>true</folderView><folderCreate>true</folderCreate><folderRename>false</folderRename><folderDelete>false</folderDelete><fileView>true</fileView><fileUpload>true</fileUpload><fileRename>false</fileRename><fileDelete>false</fileDelete></accessControl></accessControls><thumbs><enabled>true</enabled><url>%BASE_URL%_thumbs/</url><directory>%BASE_DIR%_thumbs</directory><directAccess>false</directAccess><maxHeight>100</maxHeight><maxWidth>100</maxWidth><quality>80</quality></thumbs><plugins><plugin><name>imageresize</name><class>com.ckfinder.connector.plugins.ImageResize</class><params><param name="smallThumb" value="90x90"></param><param name="mediumThumb" value="120x120"></param><param name="largeThumb" value="180x180"></param></params></plugin><plugin><name>fileeditor</name><class>com.ckfinder.connector.plugins.FileEditor</class><params></params></plugin></plugins><basePathBuilderImpl>com.ckfinder.connector.configuration.ConfigurationPathBuilder</basePathBuilderImpl></config>

这里最重要的一个参数就是baseURL,我设置的路径是‘/MyBlog/userfiles/’,这里需要注意的是必须加上完整项目名,不加项目名则无法预览,这也是我在这篇博文发表后第二天修改的原因,昨晚发表时没注意这问题,以为能上传服务器就ok了,当选择图片后则回到预览的画面,出现红色的叉号,总之,只要是ckeditor跟ckfinder无法上传的问题,基本上都是路径配置问题,好好看看路径,一般都能解决

另外上那自定义的拦截器,继承struts2默认的拦截器,这样就在上面的web.xml中用这拦截器拦截请求,好处就是按照自己的需求拦截
public class FCKFilter extends StrutsPrepareAndExecuteFilter {public void doFilter(ServletRequest req, ServletResponse res,FilterChain chain) throws IOException, ServletException {HttpServletRequest request = (HttpServletRequest) req;String URI = request.getRequestURI();String[] uriArray = URI.split("/ckfinder/core/connector/java/*/");int arrayLen = uriArray.length;if (arrayLen >= 2) {chain.doFilter(req, res);} else {super.doFilter(req, res, chain);}}}
CKEditor是使用servlet来实现的,它也是通过拦截URL的机制进行工作的,而strutes2的拦截器咱一般配置 <filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern> struts2会拦截所有以"/"开头的URL.所以ckeditor的编辑器就被strut2拦截了
这也是今天晚上困扰我的问题,一直点浏览服务器,虽然出现files,images,falsh这几个文件夹,但是点上传后出现红色的叹号,后来突然醒悟,原来是struts2拦截了!!
所以重写拦截器的目的也就是不让struts2拦截ckfinder的servlet,所以要分割url字符串,假如是ckeditor,那么split(/ckfinder/..)后就能至少分2段,这样就直接转发,不拦截。
ckfinder这插件是用来处理ckeditor上传下载的功能的

图片暂时上不来 不知道为什么一直显示图片不正常

	
				
		
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 华为平板进水了怎么办 三星平板进水了怎么办 笔记本cpu运行过高怎么办 微博永久性封号怎么办 电脑占用内存多怎么办 直播签约后悔了怎么办 移动宽带网络不稳定怎么办 股票帐号被锁定怎么办 电脑帐号锁定了怎么办 云校家帐号被锁定怎么办 qq音乐停止运行怎么办 做事效率低怎么办教案 孩子做事效率低怎么办 百度搜不到答案怎么办 学乐云账号忘了怎么办 wps云空间不足怎么办 超星密码忘了怎么办 百度钱包忘记密码怎么办 宝宝吃了粉笔怎么办 粉笔灰进眼睛怎么办 讲公开课紧张怎么办 课堂派考勤旷课怎么办 2018qq音乐付费怎么办 不满一个月社保怎么办 试用期未买社保怎么办 小视频转发黑屏怎么办 听歌要钱的怎么办 手机歌曲要付费怎么办 安装包已损坏怎么办 方舟 安装包损坏怎么办 安装包已删除怎么办 超大附件过期了怎么办 邮箱被黑客盯上怎么办 云闪付安全问题忘记了怎么办 不知道网易账号怎么办 登录过程初始化失败怎么办 登录进程初始化失败怎么办 网易邮箱地址忘了怎么办 电脑电源短路了怎么办 电脑电源有问题怎么办 手机账号忘了怎么办