`
mengyang
  • 浏览: 266137 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

fckeditor2.6使用心得

阅读更多
本文的内容大纲是:
1. 在web中配置应用Fck;
2. 用Fck自带Api做非空验证;
3. 修改文件上传的保存路径;
4. 对文件上传做大小控制;

一. 配置和应用
去官网上下载fckeditor-java-demo-2.6.rar,里面有我们需要的所有js和用于文件上传的java包。
(1)新建一工程,在webroot下建一文件夹起名为js,把fckeditor-java-demo-2.6.rar解压,把得到的fckeditor文件夹给扔到这个文件夹下面,并且可以把其中所有以“_”开头的文件夹给删掉。
(2)把需要的第三方包从fckeditor-java-demo中复制到新建的工程中,这里要注意的是若工程是以前遗留下来的,那么有的包可能会有重复,记得留下最新版本的包,否则有可能在使用时会出现异常,比如我之前有遇到过,工程里有commons-fileupload-1.1.jar和commons-io-1.2.jar都比fckeditor下使用的包要旧,于是在浏览文件服务器时就报了java.lang.NoSuchFieldError: DIRECTORY的错误,只要删掉旧包就可以了。
(3)在web.xml中,加入如下配置
	<servlet>
		<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>/js/fckeditor/editor/filemanager/connectors/*</url-pattern>
	</servlet-mapping>

这里要注意的是url-pattern参数,由于我们是把fckeditor放在了js文件夹下,所以在这个参数中就要加上/js。
(4)在src下新建一个fckeditor.properties文件,文件中的做如下配置
connector.userActionImpl=net.fckeditor.requestcycle.impl.EnabledUserAction 

这个文件用可以覆盖fck中的一些默认配置,稍后我们还会讲到其他的配置,这里我们先看connector.userActionImpl,它有三个值:
UserActionImpl已过期,一般不用;
EnabledUserAction允许文件上传浏览操作;
DisabledUserAction不允许文件上传浏览操作;
它们都继承于一个UserAction接口,并且实现也非常简单,都只有一行代码,返回true或false。

(5)在页面中我们使用fck标签来显示fckeditor编辑器
<%@ taglib uri="http://java.fckeditor.net" prefix="FCK" %>

<FCK:editor instanceName="EditorDefault" inputName="content" basePath="/js/fckeditor" />	

FCK标签有几个参数,这里说明下:
height,width代表高和宽;
value可以赋初始值;
basePath是fckeditor的相对路径,若是直接放在webroot下可以不用填;
toolbarSet编辑器使用的工具集名称,可以可以去fckconfig.js文件定义一个新的FCKConfig.ToolbarSets,然后在页面中使用;
inputName是服务端取值时使用的参数名;
instanceName代表编辑器的唯一名称(相当于ID);

二. Fck自带API
fck还有些有用的api,比如要在提交表单的时候验证内容非空,用一般的document.getElementById("").value==null来判断是不行的,应该用
	var content = FCKeditorAPI.GetInstance("EditorDefault");
	if(content.GetXHTML() == ''){
		alert("广告内容不能为空!");
		content.Focus();
		return false;
	}

EditorDefault是刚才Fck标签里的instanceName参数的值,还要注意Focus()函数也是fck自带的函数,一般的focus()不能用在这里。

三. 文件上传保存路径修改
按以上配置就可以把fck很好的给跑起来了,包括图片Flash文件的上传浏览等操作。上传的文件将默认的保持在工程fckeditor文件夹的userfiles子文件夹下,有的人可能不喜欢这个路径,甚至不喜欢把上传文件的目录放在工程下,那我们就可以使用绝对路径,也很简单,按如下配置:
(1)在fckeditor.properties文件中,添加
connector.userFilesAbsolutePath = E:/image
connector.userFilesPath = http://localhost:8080/image

connector.userPathBuilderImpl = net.fckeditor.requestcycle.impl.ServerRootPathBuilder
connector.impl = net.fckeditor.connector.impl.LocalConnector

第一个参数很好理解,是保存上传文件的绝对路径,第二个参数是在web上使用文件时的虚拟目录。后两个参数是指定接口的实现类。以上的两个实现类将会直接读取属性文件中的值后返回,若是不配置这两个属性的话,默认的实现类会把以上两个路径当做相对路径来使用,在返回之前会加上上下文路径。
(2)配置tomcat,修改server.xml,添加一个虚拟目录
<Context path="/image" docBase="E:\image" reloadable="true" debug="0"/>

这个context应该包在host标签之中。

OK,很简单的两个步骤,现在上传文件则保存在你所需要的位置了。之前被网上误导了,为了实现使用绝对路径居然还去改源代码,后来在改的过程中发现fck已经都为你想到了,真的很人性化。

四. 文件上传大小控制
最后我们在做文件上传的时候都需要限制文件大小,这个就需要改下源代码了。下载fckeditor-java-2.6-src.zip,解压,但是我们只需要动几个文件,步骤如下:
(1)在fckeditor.properties文件中,添加两个属性值,用来设置上传的图片或Flash所允许的最大值,单位是比特。
image.allowedMaxSize = 307200
flash.allowedMaxSize = 3072000

(2)修改net.fckeditor.handlers.PropertiesLoader,这个类用于从属性文件中读取指定的属性值,我们添加两个方法,用于从属性文件中读取我们刚设置的那两个值:
	public static int getImageAllowedImageSize(){
		int allowedMaxSize = 0;
		String tempStr = properties.getProperty("image.allowedMaxSize");
		if(tempStr != null){
			try {
				allowedMaxSize = Integer.parseInt(tempStr);
			} catch (NumberFormatException e) {
				logger.error("从配置文件读取的允许图片上传的最大值从字符串型转化为数值型出错!", e);
			}
		}
		return allowedMaxSize;
	}
	
	public static int getFlashAllowedImageSize(){
		int allowedMaxSize = 0;
		String tempStr = properties.getProperty("flash.allowedMaxSize");
		if(tempStr != null){
			try{
				allowedMaxSize = Integer.parseInt(tempStr);
			} catch (NumberFormatException e) {
				logger.error("从配置文件读取的允许Flash上传的最大值从字符串型转化为数值型出错!", e);
			}
		}
		return allowedMaxSize;
	}

(3)修改net.fckeditor.handlers.ResourceType,这个类用于定义上传文件的种类,我们添加一个私有变量,表示允许上传的最大值,再添加一个构造方法,在这个构造方法中初始图片类型和Flash类型的上传大小,所以图片和Flash类型的静态变量将调用这个初始化方法。
//控制上传大小(单位b)
private int allowedMaxSize = 0;

	/** Resource type <code>Flash</code> */
	public static final ResourceType FLASH = new ResourceType("Flash",
			PropertiesLoader.getFlashResourceTypePath(), Utils
					.getSet(PropertiesLoader
							.getFlashResourceTypeAllowedExtensions()), Utils
					.getSet(PropertiesLoader
							.getFlashResourceTypeDeniedExtensions()),
					PropertiesLoader.getFlashAllowedImageSize());
	/** Resource type <code>Image</code> */
	public static final ResourceType IMAGE = new ResourceType("Image",
			PropertiesLoader.getImageResourceTypePath(), Utils
					.getSet(PropertiesLoader
							.getImageResourceTypeAllowedExtensions()), Utils
					.getSet(PropertiesLoader
							.getImageResourceTypeDeniedExtensions()),
					PropertiesLoader.getImageAllowedImageSize());

/**
	 * This constructor has been made intentionally made private to provide
	 * pre-defined types only.
	 * 
	 * @param name
	 *            the name of the new resource type
	 * @param path
	 *            the absolute path of the new resource type
	 * @param allowedEextensions
	 *            the allowed extensions set of the new resource type
	 * @param deniedExtensions
	 *            the denied extensions set of the new resource type
	 * @param allowedMaxSize           
	 *            允许上传的最大值
	 * @throws IllegalArgumentException
	 *             if both sets are empty
	 * @throws IllegalArgumentException
	 *             if both sets contain extensions
	 */
	private ResourceType(final String name, final String path,
			final Set<String> allowedEextensions,
			final Set<String> deniedExtensions,
			int allowedMaxSize) {
		this(name, path, allowedEextensions, deniedExtensions);
		this.allowedMaxSize = allowedMaxSize;
	}

(4)修改net.fckeditor.connector.Dispatcher,这个类用于处理相关的文件操作,修改UploadResponse doPost(final HttpServletRequest request)方法,在上传文件之前做下大小判断
	UploadResponse doPost(final HttpServletRequest request) {
		...

			
		else if (type.equals(ResourceType.IMAGE)
				&& PropertiesLoader.isSecureImageUploads()
				&& !UtilsFile.isImage(uplFile.getInputStream())) {
			uploadResponse = UploadResponse.getInvalidFileTypeError();
		} 
        //判断文件上传大小是否合法,非法的话就返回一个自定义的表示文件太大的状态值
        else if (type.getAllowedMaxSize() > 0 && uplFile.getSize() > type.getAllowedMaxSize()) {
			uploadResponse = new UploadResponse(204);
		} else {
			
			String sanitizedFileName = UtilsFile
					.sanitizeFileName(fileName);
			logger.debug("Parameter NewFile (sanitized): {}",
					sanitizedFileName);
		
		...		
	}

(4)修改fckeditor\editor\dialog\fck_image\fck_image.js,在function OnUploadCompleted( errorNumber, fileUrl, fileName, customMsg )方法下新增一个对我们刚定义的204状态码的处理:
	switch ( errorNumber )
	{
		case 0 :	// No errors
			alert( 'Your file has been successfully uploaded' ) ;
			break ;
		case 1 :	// Custom error
			alert( customMsg ) ;
			return ;
		case 101 :	// Custom warning
			alert( customMsg ) ;
			break ;
		case 201 :
			alert( 'A file with the same name is already available. The uploaded file has been renamed to "' + fileName + '"' ) ;
			break ;
		case 202 :
			alert( 'Invalid file type' ) ;
			return ;
		case 203 :
			alert( "Security error. You probably don't have enough permissions to upload. Please check your server." ) ;
			return ;
		case 204 :
			alert( "文件太大." ) ;
			return ;
		case 500 :
			alert( 'The connector is disabled' ) ;
			break ;
		default :
			alert( 'Error on file upload. Error number: ' + errorNumber ) ;
			return ;
	}

至此,文件上传大小控制就修改好了,文件大小的最大值可以直接在属性文件中配置。其实fck for java服务端的源码还是比较简单的,有什么特殊的需求查看修改下源码也不会难道哪里去。
8
6
分享到:
评论
3 楼 mengyang 2011-03-17  
fabulous 写道
第四点时错误的:修改fckeditor\editor\filemanager\browser\default\frmupload.html,在function OnUploadCompleted( errorNumber, data )改成fckeditor\editor\dialog\fck_image\fck_image.js中的function OnUploadCompleted( errorNumber, fileUrl, fileName, customMsg )方法

感谢纠正,是我失误了,图片的上传是改fck_image.js,flash的上传还要再改fckeditor\editor\dialog\fck_flash\fck_flash.js
2 楼 fabulous 2011-03-16  
第四点时错误的:修改fckeditor\editor\filemanager\browser\default\frmupload.html,在function OnUploadCompleted( errorNumber, data )改成fckeditor\editor\dialog\fck_image\fck_image.js中的function OnUploadCompleted( errorNumber, fileUrl, fileName, customMsg )方法
1 楼 fabulous 2011-03-15  
难得的好帖子,我再改下源代码,准备加入图片压缩!

相关推荐

    fckeditor2.6JAR

    这些JAR文件一起构成了FCKeditor2.6在Java环境下的运行环境,它们共同提供了处理文本编辑、文件上传、日志记录以及图像处理等功能,使得开发者可以在Web应用中轻松集成和使用FCKeditor2.6。在实际开发中,理解并正确...

    FCKEditor 2.6 JSP 使用说明(嵌入方法)

    **FCKEditor 2.6 JSP 使用说明(嵌入方法)** FCKEditor是一款流行的开源富文本编辑器,主要用于Web应用中,提供用户友好的界面来编辑HTML内容。在JSP环境中集成FCKEditor,可以提升网站内容编辑的用户体验。下面我们...

    配置好的fckeditor2.6 lite3

    在使用这个配置好的FCKeditor2.6 lite3时,用户需要注意以下几点: 1. **兼容性**:确保你的网站支持编辑器所依赖的JavaScript和CSS,同时检查与当前浏览器的兼容性。 2. **安全**:虽然FCKeditor提供了很多功能,但...

    fckeditor2.6 asp 版 配置好精简过

    在这个"**fckeditor2.6 asp 版 配置好精简过**"的压缩包中,我们聚焦的是FCKeditor的一个特定版本——2.6,针对ASP(Active Server Pages)平台进行了优化和配置。ASP是一种由微软开发的服务器端脚本环境,允许...

    FCKeditor2.6.4.1 在线编辑器 JSP

    通过以上步骤,FCKeditor 2.6.4.1 就可以在JSP环境中作为强大的在线编辑器使用,为用户提供便捷的内容创作和管理体验。在实际项目中,开发者还需要考虑安全性、性能优化以及与其他系统集成的问题,确保FCKeditor与...

    FCKEditor2.6使用小示例

    在本文中,我们将深入探讨FCKEditor 2.6版本的使用方法,包括其安装、配置、基本功能及自定义设置,旨在帮助开发者更好地理解和应用这一工具。 一、FCKEditor 2.6简介 FCKeditor 2.6是一个基于JavaScript的WYSIWYG...

    FCKeditor 2.6 图片预览

    FCKeditor 2.6 浏览服务器 图片预览 FCKeditor 2.6 浏览服务器 图片预览 FCKeditor 2.6 浏览服务器 图片预览 FCKeditor 2.6 浏览服务器 图片预览 FCKeditor 2.6 浏览服务器 图片预览

    FCKEditor2.6使用小示例完全示例

    下面我们将详细探讨FCKEditor 2.6的使用方法和关键特性。 **1. 安装与集成** 首先,你需要从官方网站下载FCKEditor 2.6的压缩包,解压后得到源代码文件。在你的项目中,将这些文件复制到合适的位置,通常是在...

    如何在FCKeditor 2.6中添加插入视频和音频功能

    本篇文章将详细探讨如何在FCKeditor 2.6中添加插入视频和音频功能,以便为用户提供更丰富的多媒体体验。 首先,理解FCKeditor的基本架构至关重要。FCKeditor由一系列插件构成,这些插件负责提供特定的功能,如图片...

    fckEditor2.6美化实用版<JSP>

    《fckEditor2.6美化实用版——打造高效富文本编辑体验》 fckEditor是一款功能强大的开源富文本编辑器,尤其在JSP(JavaServer Pages)环境中广泛应用。fckEditor2.6版本是其发展过程中的一个重要里程碑,它在前一...

    Fckeditor2.6 jsp版 并且可以重命名

    Eclipse是Java开发者广泛使用的集成开发环境(IDE),Fckeditor2.6的jsp版可以方便地导入到Eclipse工程中,这意味着开发者可以直接在Eclipse中进行Fckeditor的相关开发和调试工作,无需额外设置或配置,大大提高了...

    FCKEditor 2.6 for java jsp

    FCKEditor 2.6是一款广泛使用的开源富文本编辑器,专为Java JSP环境设计,使得开发者能够在网页中轻松实现复杂的内容编辑功能。这款编辑器在原有的基础上进行了优化和调整,特别针对文件、图片和Flash上传进行了改造...

    FCKeditor2.6 在线编辑器

    其次,FCKeditor2.6版本提供了多种语言支持,包括中文,使得国内外用户都能无障碍地使用。此外,其API接口丰富,开发者可以根据需求进行定制,例如添加自定义按钮或工具栏,以满足特定的应用场景。编辑器还支持HTML...

    Fckeditor 2.6 精简.rar

    总的来说,Fckeditor 2.6 精简版是针对特定需求进行定制的版本,它在保证基本功能的前提下,实现了更高效、更轻量级的使用体验。对于开发者来说,可以根据自己的项目需求进一步调整和扩展,以满足更个性化的功能需求...

    FCKeditor2.6 for asp.net

    在使用FCKeditor2.6 for ASP.NET时,开发者需要注意以下关键知识点: 1. **集成步骤**:首先,将FCKeditor的文件解压并复制到项目的适当目录,通常是在Scripts或Controls文件夹下。然后,在需要使用编辑器的页面中...

    FCKeditor 2.6 精简版第三版(带表格)

    Sablog-X和Sa系列程序将一直延续使用本人所精简的FCKeditor。 FCKeditor 2.6 精简版第三版(带表格)修改内容如下: 带表格功能 FCKeditor 2.6 精简版第三版修改内容如下: 修补第一第二版存在的焦点丢失BUG,即在IE...

    fckeditor2.6 完整配置 导入即可运行

    本项目是根据itcast 和网上找的一些资料,自己写出来的一个fckeditor 项目,希望对大家有用,内含我所用到的所有文件,包括 FCKeditor_2.6.6.tar.gz 、fckeditor-java-2.4-bin.zip、fckeditor-java-2.4-src.zip、slf...

    fckeditor2.6 for jsp

    jsp 程序调用fckeditor2.6 版本的 小例子 本人发现fckeditor2.6加 fckeditor for 2.3 的时候在上传中文文件的时候会出现乱码 所以本人就小改了一下 fckeditor2.3的源代码,以时间重命名上传文件名,没什么技术...

    FCKeditor 2.6使用

    **FCKeditor 2.6使用详解** FCKeditor是一款著名的开源富文本编辑器,它在Web应用中广泛用于提供类似Word的文本编辑体验。FCKeditor 2.6是其较早的一个版本,尽管现在有更先进的版本,但了解其使用方法仍然对许多...

    FCKeditor 2.6

    FCKeditor_2.6.4.1.tar.gz,最好的html在线编辑工具,同时可以进行文件上传,适合php,asp,java

Global site tag (gtag.js) - Google Analytics