Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1609235
  • 博文数量: 585
  • 博客积分: 14610
  • 博客等级: 上将
  • 技术积分: 7402
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-15 10:52
文章存档

2013年(5)

2012年(214)

2011年(56)

2010年(66)

2009年(44)

2008年(200)

分类:

2008-05-30 11:51:01



1、在fckeditor.net/ 下载FCKeditor 2.3 和FCKeditor.Java包 FCKeditor-2.3.jar
注意 将FCKEditor2.3(主文件解压到WebRoot\components\fck).jar
 
2、配置web.xml 支持FCKEditor的图片文件上传和浏览


Connector
com.fredck.FCKeditor.connector.ConnectorServlet


baseDir
/uploadfiles/


debug
false

2



SimpleUploader
com.fredck.FCKeditor.uploader.SimpleUploaderServlet

baseDir
/uploadfiles/


debug
false


enabled
true


AllowedExtensionsFile



DeniedExtensionsFile
php|php3|php5|phtml|asp|aspx|ascx|jsp|cfm|cfc|pl|bat|exe|dll|reg|cgi|htm|html


AllowedExtensionsImage
jpg|gif|jpeg|png|bmp


DeniedExtensionsImage



AllowedExtensionsFlash
swf|fla


DeniedExtensionsFlash


1



Connector
/components/fck/editor/filemanager/browser/default/connectors/jsp/connector



SimpleUploader
/components/fck/editor/filemanager/upload/simpleuploader


3、加入FCKeditor-2.3.jar和commons-fileupload.jar

4、但是fckeditor的文件实在太多了,精简一下,删除以下目录及文件:

1./_testcases, /_samples,
2./editor/_source, /editor/skins/office2003, /editor/skins/silver,
/editor/filemanager/upload, /editor/filemanager/browser/default/connector
3./editor/lang 仅保留en.js,zh_cn.js
4.在/的php,py等后缀名的文件
5.删除plugin目录和dialog目录的spellcheck

5、将干净的fck目录复制到项目中
6、修改配置文件 fckconfig.js
FCKConfig.DefaultLanguage = 'zh-cn' ;
删除spell check 相关的两处地方
修改如下 url, 使用 fckeditor servelt 来做文件上传与目录浏览:

FCKConfig.LinkBrowserURL = FCKConfig.BasePath +
" filemanager/browser/default/browser.html?Connector=connectors/jsp/connector " ;

FCKConfig.ImageBrowserURL =

FCKConfig.BasePath + " filemanager/browser/default/browser.html?Type=Image&Connector=connectors/jsp/connector " ;

FCKConfig.FlashBrowserURL = FCKConfig.BasePath + " filemanager/browser/default/browser.html?Type=Flash&Connector=connectors/jsp/connector " ;


FCKConfig.LinkUploadURL = FCKConfig.BasePath +
'filemanager / upload / simpleuploader ? Type = File' ;

FCKConfig.FlashUploadURL = FCKConfig.BasePath + 'filemanager / upload / simpleuploader ? Type = Flash' ;
FCKConfig.ImageUploadURL = FCKConfig.BasePath + 'filemanager / upload / simpleuploader ? Type = Image' ;

配置选项:
AutoDetectLanguage=true/false 自动检测语言
BaseHref="" 相对链接的基地址
ContentLangDirection="ltr/rtl" 默认文字方向
ContextMenu=字符串数组,右键菜单的内容
CustomConfigurationsPath="" 自定义配置文件路径和名称
Debug=true/false 是否开启调试功能,这样,当调用FCKDebug.Output()时,会在调试窗中输出内容
DefaultLanguage="" 缺省语言
EditorAreaCss="" 编辑区的样式表文件
EnableSourceXHTML=true/false 为TRUE时,当由可视化界面切换到代码页时,把HTML处理成XHTML
EnableXHTML=true/false 是否允许使用XHTML取代HTML
FillEmptyBlocks=true/false 使用这个功能,可以将空的块级元素用空格来替代
FontColors="" 设置显示颜色拾取器时文字颜色列表
FontFormats="" 设置显示在文字格式列表中的命名
FontNames="" 字体列表中的字体名
FontSizes="" 字体大小中的字号列表
ForcePasteAsPlainText=true/false 强制粘贴为纯文本
ForceSimpleAmpersand=true/false 是否不把&符号转换为XML实体
FormatIndentator="" 当在源码格式下缩进代码使用的字符
FormatOutput=true/false 当输出内容时是否自动格式化代码
FormatSource=true/false 在切换到代码视图时是否自动格式化代码
FullPage=true/false 是否允许编辑整个HTML文件,还是仅允许编辑BODY间的内容
GeckoUseSPAN=true/false 是否允许SPAN标记代替B,I,U标记
IeSpellDownloadUrl=""下载拼写检查器的网址
ImageBrowser=true/false 是否允许浏览服务器功能
ImageBrowserURL="" 浏览服务器时运行的URL
ImageBrowserWindowHeight="" 图像浏览器窗口高度
ImageBrowserWindowWidth="" 图像浏览器窗口宽度
LinkBrowser=true/false 是否允许在插入链接时浏览服务器
LinkBrowserURL="" 插入链接时浏览服务器的URL
LinkBrowserWindowHeight=""链接目标浏览器窗口高度
LinkBrowserWindowWidth=""链接目标浏览器窗口宽度
Plugins=object 注册插件
PluginsPath="" 插件文件夹
ShowBorders=true/false 合并边框
SkinPath="" 皮肤文件夹位置
SmileyColumns=12 图符窗列数
SmileyImages=字符数组 图符窗中图片文件名数组
SmileyPath="" 图符文件夹路径
SmileyWindowHeight 图符窗口高度
SmileyWindowWidth 图符窗口宽度
SpellChecker="ieSpell/Spellerpages" 设置拼写检查器
StartupFocus=true/false 开启时FOCUS到编辑器
StylesXmlPath="" 设置定义CSS样式列表的XML文件的位置
TabSpaces=4 TAB键产生的空格字符数
ToolBarCanCollapse=true/false 是否允许展开/折叠工具栏
ToolbarSets=object 允许使用TOOLBAR集合
ToolbarStartExpanded=true/false 开启是TOOLBAR是否展开
UseBROnCarriageReturn=true/false 当回车时是产生BR标记还是P或者DIV标记

1.如果还有时间可以修改一下FCKConfig.ToolbarSets["Default"],只留下需要的***能。

fckconfig.js总配置文件,可用记录本打开,修改后将文件存为utf-8 编码格式.

2.编辑器域内可以使用Tab键

找到:FCKConfig.TabSpaces = 0 ;
  改为FCKConfig.TabSpaces = 1 ; 即在编辑器域内可以使用Tab键.

3.如果你的编辑器还用在网站前台的话,比如说用于留言本或是日记回复时,那就不得不考虑安全了,
在前台千万不要使用Default的toolbar,要么自定义一下功能,要么就用系统已经定义好的Basic,
也就是基本的toolbar,

找到:
FCKConfig.ToolbarSets["Basic"] = [
['Bold','Italic','-','OrderedList','UnorderedList','-',/*'Link',*/'Unlink','-','Style','FontSize','TextColor','BGColor','-',
'Smiley','SpecialChar','Replace','Preview'] ] ;

这是改过的Basic,把图像功能去掉,把添加链接功能去掉,因为图像和链接和flash和图像按钮添加功能都能让前台

4.页直接访问和上传文件, fckeditor还支持编辑域内的鼠标右键功能.
FCKConfig.ContextMenu = ['Generic',/*'Link',*/'Anchor',/*'Image',*/'Flash','Select','Textarea','Checkbox','Radio','TextField','HiddenField',
/*'ImageButton',*/'Button','BulletedList','NumberedList','TableCell','Table','Form'];

.这也是改过的把鼠标右键的"链接,图像,FLASH,图像按钮"功能都去掉.

5、字体列表

 找到: FCKConfig.FontNames = 'Arial;Comic Sans MS;Courier New;Tahoma;Times New Roman;Verdana' ;

加上几种我们常用的字体
FCKConfig.FontNames
= '宋体;黑体;隶书;楷体_GB2312;Arial;Comic Sans MS;Courier New;Tahoma;Times New Roman;Verdana' ;

6.
1、默认语言
打开fckconfig.js文件(相对FCKeditor文件夹,以下同),把自动检测语言改为不检测,把默认语言改为简体中文:

FCKConfig.AutoDetectLanguage = false ;
FCKConfig.DefaultLanguage = ''zh-cn'' ;

7.
、文件上传
   FCKeditor 的文件管理程序在filemanager文件夹中,又分为浏览(browser)和上传(upload)两种。浏览是指浏览服务器文件并可以选择,也可以 上传本地文件至服务器;上传是指快速上传(QuickUpload),在窗口中点“上传”选项卡打开就是,跟我们使用的UBB编辑器有点相似,选择本地文 件后上传就行。
也就是说FCKeditor中有一个文件浏览,有两个文件上传,而这些设置有些在一个文件中,有的则在多个文件中。比较复杂,改动比较多,我们再分几个小点儿来说。

①打开和关闭文件浏览和上传功能
   有三个文件跟这个开关有关系,一个是js文件,两个是asp文件,前者关闭后界面中不出现相关窗口或按钮,后者关闭后相关功能不可用。
   首先是fckconfig.js文件,以下内容设为true为开,false则为关。
文件浏览和浏览中上传功能:


FCKConfig.LinkBrowser = false ;
FCKConfig.ImageBrowser = false ;
FCKConfig.FlashBrowser = false ;


文件快速上传功能:

FCKConfig.LinkUpload = true ;
FCKConfig.ImageUpload = true ;
FCKConfig.FlashUpload = true ;


其次设置两个asp文件:
editor\filemanager\browser\default\connectors\asp\config.asp

ConfigIsEnabled = False


表示文件浏览关闭
editor\filemanager\upload\asp\config.asp

ConfigIsEnabled = True


表示文件快速上传打开

②文件上传或浏览的路径设置
注 意FCKeditor是不支持虚拟目录的,您的所有路径都是针对网站根目录的绝对路径,这点对于在本地测试用虚拟目录,发布到远程用网站目录的开发者不太 方便。我的就是这样,WinXP系统只能一个站点,只有用虚拟目录表示不同的网站,在本地测试好了,上传前还要临时更改这个设置。
文件浏览路径,打开文件editor\filemanager\browser\default\connectors\asp\config.asp:

ConfigUserFilesPath = "/attachments/"


快速上传的路径,打开文件editor\filemanager\upload\asp\config.asp:


ConfigUserFilesPath = "/attachments/"


我的文件目录在下面,就照以上设置。如果在本地测试这个网站在虚拟目录xxx中,则应该设置为:

ConfigUserFilesPath = "/127.0.0.1/temp/"

③文件快速上传的一个源文件BUG
以上设置好后,文件浏览和浏览中上传可以顺利进行,但是你会发现“快速上传”不能用。现象就是当选择好本地文件后,点击“上传至服务器”的按钮后没有任何反应。这就是因为fckconfig.js文件中的一个bug所致。
打开fckconfig.js文件,把FCKConfig.QuickUploadLanguage字样的地方,替换成_QuickUploadLanguage,一共要替换三个地方。前者没有定义就使用,所以有错,按代码意图应该和后者的值一样的。

④上传文件名自动更名
FCKeditor 不支持中文文件名称,所以我们要让文件存入服务器时更改名称。由于有两个上传的地方,而且所用文件不同,所以两个文件应该同时改,我们先来看看快速上传的 文件,打开editor\filemanager\upload\asp\upload.asp,在文件最后添加以下函数:


Public Function GetNewFileName()
dim ranNum
dim dtNow
dtNow=Now()
randomize
ranNum=int(90*rnd)+10
GetNewFileName=year(dtNow) & right("0" & month(dtNow),2) & right("0" & day(dtNow),2) & right("0" & hour(dtNow),2) & right("0" & minute(dtNow),2) & right("0" & second(dtNow),2) & ranNum
End Function


我们用年月日时分秒和两位随机数字来作为文件名,这样既能够分辨出文件上传时间,也不容易重名。
然后仍然是这个文件,找到:
'' Get the uploaded file name.
sFileName = oUploader.File( "NewFile" ).Name


把它改为:

'' Get the uploaded file name.
sFileName = GetNewFileName() &"."& split(oUploader.File( "NewFile" ).Name,".")

上面说的是快速上传的文件,而文件浏览中上传则是更改另外一个文件(editor\filemanager\browser\default\connectors\asp\commands.asp),其修改方法和上面那个文件一样:添加一个函数,修改一行代码。

在 JSP 中的使用方法

<%@page language="java" import="com.fredck.FCKeditor.* " %>

<%
FCKeditor oFCKeditor ;
oFCKeditor = new FCKeditor(request,"content");
// oFCKeditor.setBasePath("/cms/admin/components/fck/");// ---- FCK所在路径
oFCKeditor.setBasePath("components/fck/");// ---- FCK所在路径
oFCKeditor.setValue("value"); // ---- 文本框内的值
out.println(oFCKeditor.create()) ;
%>




4.FCKeditor类说明

下面是用来在页面中建立编辑器的FCKEDITOR 类的说明

(1) 构造器:

FCKeditor(instanceName[,width,height,toolbarSet,value])

instanceName:编辑器的唯一名称(相当于ID)

WIDTH:宽度

HEIGHT:高度

toolbarSet:工具条集合的名称

value:编辑器初始化内容

(2) 属性:

instanceName:编辑器实例名

width:宽度,默认值为100%

height:高度,默认值是200

ToolbarSet:工具集名称,参考FCKCONFIG.JS,默认值是Default

value:初始化编辑器的HTML 代码,默认值为空

BasePath:编辑器的基路径,默认为/Fckeditor/文件夹,注意,尽量不要使用相对路径.最用相对于站点根路径的表示方法,要以/结尾

CheckBrowser:是否在显示编辑器前检查浏览器兼容性,默认为true

DisplayErrors:是否显示提示错误,默为true;

(3) 集合:

Config[Key]=value;

这个集合用于更改配置中某一项的值,

oFckeditor.Config["DefaultLanguage"]="ptbr";

(4) 方法:

Create()

建立并输出编辑器

RepaceTextArea(TextAreaName)

用编辑器来替换对应的文本框

5.如何配置FCKEDITOR

FCKEDITOR 提供了一套用于定制其外观,特性及行为的设置集.主配置文件名为Fckconfig.js你既可以编辑主配置文件,也可以自己定义单独的配置文件.配置文件使用JAVASCRIPT 语法.修改后,在建立编辑器时,可以使用以下语法:

varoFCKeditor=newFCKeditor('FCKeditor1');

oFCKeditor.Config['CustomConfigurationsPath']='/myconfig.js';

oFCKeditor.Create();

提醒:当你修改配置后,请清空浏览器缓存以查看效果

配置选项:

AutoDetectLanguage=true/false 自动检测语言

BaseHref=""相对链接的基地址

ContentLangDirection="ltr/rtl"默认文字方向

ContextMenu=字符串数组,右键菜单的内容

CustomConfigurationsPath=""自定义配置文件路径和名称

Debug=true/false 是否开启调试功能,这样,当调用FCKDebug.Output(),会在调试窗中输出内容

DefaultLanguage=""缺省语言

EditorAreaCss=""编辑区的样式表文件

EnableSourceXHTML=true/false TRUE ,当由可视化界面切换到代码页时,HTML 处理成XHTML

EnableXHTML=true/false 是否允许使用XHTML 取代HTML

FillEmptyBlocks=true/false 使用这个功能,可以将空的块级元素用空格来替代

FontColors=""设置显示颜色拾取器时文字颜色列表

FontFormats=""设置显示在文字格式列表中的命名

FontNames=""字体列表中的字体名

FontSizes=""字体大小中的字号列表

ForcePasteAsPlainText=true/false 强制粘贴为纯文本

ForceSimpleAmpersand=true/false 是否不把&符号转换为XML 实体

FormatIndentator=""当在源码格式下缩进代码使用的字符

FormatOutput=true/false 当输出内容时是否自动格式化代码

FormatSource=true/false 在切换到代码视图时是否自动格式化代码

FullPage=true/false 是否允许编辑整个HTML 文件,还是仅允许编辑BODY 间的内容

GeckoUseSPAN=true/false 是否允许SPAN 标记代替B,I,U 标记

IeSpellDownloadUrl=""下载拼写检查器的网址

ImageBrowser=true/false 是否允许浏览服务器功能

ImageBrowserURL=""浏览服务器时运行的URL

ImageBrowserWindowHeight=""图像浏览器窗口高度

ImageBrowserWindowWidth=""图像浏览器窗口宽度

LinkBrowser=true/false 是否允许在插入链接时浏览服务器

LinkBrowserURL=""插入链接时浏览服务器的URL

LinkBrowserWindowHeight=""链接目标浏览器窗口高度

LinkBrowserWindowWidth=""链接目标浏览器窗口宽度

Plugins=object 注册插件

PluginsPath=""插件文件夹

ShowBorders=true/false 合并边框

SkinPath=""皮肤文件夹位置

SmileyColumns=12 图符窗列数

SmileyImages=字符数组图符窗中图片文件名数组

SmileyPath=""图符文件夹路径

SmileyWindowHeight 图符窗口高度

SmileyWindowWidth 图符窗口宽度

SpellChecker="ieSpell/Spellerpages"设置拼写检查器

StartupFocus=true/false 开启时FOCUS 到编辑器

StylesXmlPath=""设置定义CSS 样式列表的XML 文件的位置

TabSpaces=4TAB 键产生的空格字符数

ToolBarCanCollapse=true/false 是否允许展开/折叠工具栏

ToolbarSets=object 允许使用TOOLBAR 集合

ToolbarStartExpanded=true/false 开启是TOOLBAR 是否展开

UseBROnCarriageReturn=true/false 当回车时是产生BR 标记还是P 或者DIV 标记__

6.自定义样式列表

FCKEDITOR 的样式工具栏中提供了预定义的样式,样式是通过XML 文件定义的,默认的

XML 样式文件存在于FCkEditor 根文件夹下的FckStyls.xml 文件中

这个XML 文件的结构分析如下:



    
        
        
    
    
    
        
    
    

 

每一个STYLE 标记定义一种样式,NAME 是显示在下拉列表中的样式名,ELEMENT 属性指

定此样式所适用的对象,因为FCKEDITOR 中的样式是上下文敏感的,也就是说,选择不同的

对象,仅会显示针对这类对象定义的样式

一、解决上传乱码:
   在SimpleUploaderServlet.java和ConnectorServlet.java两个文件里找到
DiskFileUpload upload = new DiskFileUpload();
分别在其后加入 upload.setHeaderEncoding("utf-8");
这样解决了文件上传的中文乱码问题.
但是在控制台显示的中文内容还是乱码,但是没关系,我们没必要去看控制台下的中文
500错误:
如果你上传时,出现500的错误,试试加上serializer.jar,xalan.jar,commons-fileupload.jar三个包.


二,根据自己的需求修改:
点击上传图片,将图片信息上传到数据库.
修改connector/ConnectorServlet.java dopost/doget方法.
我用的是post方式提交的:

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

if (debug) System.out.println("--- BEGIN DOPOST ---");

response.setContentType("text/html; charset=UTF-8");
response.setHeader("Cache-Control","no-cache");
PrintWriter out = response.getWriter();

String commandStr=request.getParameter("Command");
String typeStr=request.getParameter("Type");
String currentFolderStr=request.getParameter("CurrentFolder");

String currentPath=baseDir+typeStr+currentFolderStr;
// System.out.println(currentPath);
String currentDirPath=getServletContext().getRealPath(currentPath);

if (debug) System.out.println(currentDirPath);

String retVal="0";
String newName="";

if(!commandStr.equals("FileUpload"))
   retVal="203";
else {
   DiskFileUpload upload = new DiskFileUpload();
try {
   List items = upload.parseRequest(request);

   Map fields=new HashMap();

   Iterator iter = items.iterator();
  

   while (iter.hasNext()) {
     FileItem item = (FileItem) iter.next();

     if (item.isFormField())

       fields.put(item.getFieldName(),item.getString());
    else
       fields.put(item.getFieldName(),item);
    }

FileItem uplFile=(FileItem)fields.get("NewFile");
String fileNameLong=uplFile.getName();
// System.out.println(fileNameLong);
fileNameLong=fileNameLong.replace('\\','/');
String[] pathParts=fileNameLong.split("/");
String fileName=pathParts[pathParts.length-1];
// System.out.println(fileName+"ccccccccccc");
String nameWithoutExt=getNameWithoutExtension(fileName);
System.out.println(nameWithoutExt);
String ext=getExtension(fileName);
System.out.println(ext);
// 上传图片信息,添加到数据库中 开始
List imlist=new ArrayList();
ImageMessage img=new ImageMessage();
img.setImageName(fileName);
img.setImagePaht(currentDirPath);
imlist.add(img);
LinkDatabase link=new LinkDatabase();
link.insertMessage(imlist);
//结束
File pathToSave=new File(currentDirPath,fileName);
int counter=1;
while(pathToSave.exists()){
newName=nameWithoutExt+"("+counter+")"+"."+ext;
retVal="201";
pathToSave=new File(currentDirPath,newName);
counter++;
}
uplFile.write(pathToSave);
}catch (Exception ex) {
retVal="203";
}

}

out.println("");
out.flush();
out.close();

if (debug) System.out.println("--- END DOPOST ---");

}


三,动态的修改工具栏

修改fckconfig.js文件.
在添加下面代码,把"Default",改为自定义工具名称.在jsp 页面设置FCKeditor实例 oFCKeditor.setToolbarSet("自定义工具名称");
FCKConfig.ToolbarSets["Default"] = [
['Source','DocProps','-','Save','NewPage','Preview','-','Templates'],
['Cut','Copy','Paste','PasteText','PasteWord','-','Print','SpellCheck'],
['Undo','Redo','-','Find','Replace','-','SelectAll','RemoveFormat'],
['Form','Checkbox','Radio','TextField','Textarea','Select','Button','ImageButton','HiddenField'],
'/',
['Style','FontFormat','FontName','FontSize'],
['TextColor','BGColor'],
['FitWindow','-','About']
] ;



阅读(3313) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2009-06-08 13:11:36