手机端小强原创文章,java小强个人博客站点
当前位置: 首页 >> JS >> FCKEditor深度涉险

FCKEditor深度涉险

19670 JS | 2015-1-4

1.允许上传

(1)  下载官方的Java包,内含有四个JAR,其实需要的是五个,所以下载WAR包,解压,拷贝示例工程内的Jar包!

(2)  解压fckeditor-java-2.5-bin.zip,目录内有一个site是使用文档,打开文档找到Connector Servlet

(3)按照说明先走两步

第一:配置Servlet,将提供的内容拷贝到Web.xml中即可!

第二:在Src下配置一个Connector Servlet属性文件,文件内容直接拷贝!而后我们还要建立上传的文件夹,默认为:/fckeditor/userfiles/image/ ,建立此目录

到此,图片上传功能完成!

关于中文乱码问题

最好的解决方法是不是用中文,在存储图片时修改源代码,将文件名称进行修改,我们找到FCK的Servlet,不同版本的Servlet也不同。

本人使用fckeditor-java-2.5-bin.zip,Web中对应的Servlet为:

<servlet-class>
net.fckeditor.connector.ConnectorServlet
</servlet-class>

找到该源文件,附加上源码,源码可以从官方同一个位置下载,我们找不到关于文件上传有关的代码,那么我们使用 Ctrl 进入下一个流程类,我这里进入了 同包下的Dispatcher这是一个普通类,知道Post方法,可以看到上传的流程。流程中好几个变量都是引用的上传文件名,其实我们要修改的是 最初文件名 sanitizedFileName:我们使用UUID唯一标识来做:

我们不能修改源代码,其实我们可以这样做,建立一个和Dispatcher同名的包和类,然后将代码全部复制到该文件,删除Jar中的Dispatcher.class

修改sanitizedFileName为唯一标识:

//将文件重命名
sanitizedFileName = UUID.randomUUID().toString() + 
sanitizedFileName.substring(sanitizedFileName.lastIndexOf("."));

注意加上文件的后缀名,不然保存失败!

这样就避免了中文乱码和文件同名覆盖的问题!


2.控制上传类型

这个功能是通过修改配置文件类型来实现的,详细参考可以看文档

核心包中也有相应配置,在package net.fckeditor.handlers 包中有一个配置文件

Default. Properties配置的前四项就是配置文件,图片,Flash,媒体的格式的配置,我们将其拷贝到我们的配置文件fckeditor.properties中,然后进行相应修改,这样服务器端的控制已经达到,还要修改客户端的配置文件,同样是在fckconfig.js 中,找到

FCKConfig.ImageUpload = true ;
FCKConfig.ImageUploadURL = FCKConfig.BasePath + 'filemanager/connectors/' + _QuickUploadLanguage + '/upload.' + _QuickUploadExtension + '?Type=Image' ;
FCKConfig.ImageUploadAllowedExtensions = ".(jpg|gif)$" ;  // empty for all
FCKConfig.ImageUploadDeniedExtensions = "" ;

修改FCKConfig.ImageUploadAllowedExtensions属性,注意增加或修改,格式是以竖线分割的,修改发布后就会在服务器端和客户端产生类型控制!

对于Flash和媒体的配置都是一样的!


3.控制上传文件大小

目前不同版本实现可能不同,但机制是一样的。

和上传增加自动标识列一样,同样是在增加UUID的Post方法中进行判断文件大小,FCK并没有提供这种机制

在上传的对象中有判断文件大小的方法

//控制上传文件大小
if(uplFile.getSize() > 10 * 1024){
 LocalizedMessages lm = LocalizedMessages.getInstance(ThreadLocalData
   .getRequest());
 return  new UploadResponse(204, null, null, lm
   .getInvalidCurrentFolderSpecified());
}

以上如果文件大于10K的话就不能通过,关于返回的对象,其实是供客户端调用的。

对于这个对象可以参考其他判断中返回的对象例如:

在上传一开始就有如下判断:

if (!RequestCycleHandler.isEnabledForFileUpload(request))
 uploadResponse = UploadResponse.getFileUploadDisabledError();
// check parameters  
else if (!Command.isValidForPost(context.getCommandStr()))
 uploadResponse = UploadResponse.getInvalidCommandError();
else if (!ResourceType.isValidType(context.getTypeStr()))
 uploadResponse = UploadResponse.getInvalidResourceTypeError();
else if (!UtilsFile.isValidPath(context.getCurrentFolderStr()))
 uploadResponse = UploadResponse.getInvalidCurrentFolderError();
else {

就是如果条件不符合,则有一个UploadResponse对象被返回,到这个类的各个方法中看看,进入UploadResponse类可以看到他定义了许多供返回的常量

/** Creates a <code>INVALID RESOURCE TYPE</code> error. */
 public static UploadResponse getInvalidResourceTypeError() {
  LocalizedMessages lm = LocalizedMessages.getInstance(ThreadLocalData
    .getRequest());
  return new UploadResponse(EN_CUSTOM_ERROR, null, null, lm
    .getInvalidResouceTypeSpecified());
 }

通过他的一个方法可以看出,创建一个LocalizedMessages对象,然后返回一个带有标识的UploadResponse对象。所以在文件太大不符合要求时可以这样返回

LocalizedMessages lm = LocalizedMessages.getInstance(ThreadLocalData
   .getRequest());
 return  new UploadResponse(204, null, null, lm
   .getInvalidCurrentFolderSpecified());

这个204是自己定义的,但是不要和FCK定义的重复,即不要和UploadResponse类中定义的常量重复。

返回204 标识后客户端会接受,接收错误码的页面是 fck_image.html ,具体处理错误码的地方是该页面引入的一个JS文件,在fck_image.js中控制的找到

function OnUploadCompleted( errorNumber, fileUrl, fileName, customMsg )

方法,可以看到,这里接受的错误码!在这里增加自己的错误码,并给予提示。同时可以在这里修改文件错误时各种情况的提示信息

增加

case 204:
 alert( "文件大小超出限制" ) ;
 return ;

这样就完成了,上传图片时不能大于10K的功能!注意的是,所有上传类型都不能大于10K,这样设置的话。

推荐您阅读更多有关于“ 上传 FCKeditor JS编辑器 ”的文章

上一篇:程序员应该读过哪些书 下一篇:FCKEditor的使用

猜你喜欢

发表评论:

个人资料
blogger

java小强
没有思考,人生的路会越走越难!

搜索
分类
最新微语
  • 8月1日,我已离开奋斗多年的北京。不知道是暂时的离开,还是永久的离别,反正已经离职在家,告别每日上班,每天苦累的煎熬,过一段属于自己的生活。以前是专职工作,现在专职生活。

    2017-08-18 12:47

  • 又弄完一个项目,累成狗,但是感觉又进步不少,除了很多坑已经踩过,做起来也是轻车熟路。同时也认识到,程序不在于你多牛逼,而是在乎你的细节把控度,而细节的关注,是一个优秀程序员必须要注意的。另外,要相信自己,勇敢向前,没人生下来就是成功的,而且,成功的路,比成功本身更重要。

    2017-06-30 09:46

  • 今日北京再次沙尘暴来袭,吃了几年细粮,终于能来口粗粮了,不过大早上看见这场景,还是吓我一跳,不过随后就平静了,毕竟是老朋友了。进公司又发现一股烤糊的味道,真是祸不单行啊,例外都是污染。发了两个口罩,开启保护模式。

    2017-05-04 10:16

  • 今天同学问我,最近还在写代码吗?我想了想,这个问题怎么回答呢,我好像确实很长时间,虽然写了一些,但是主要内容已经不是写代码了。然后再想想,自己也7年多了,这么多年了,我收获了什么,我的目标到底是什么。眼看就奔三了,人生啊,开启感叹模式。

    2017-03-30 22:52

  • 也许大家都已经注意到了,今年的房价,好多地方都是翻了一番,跟着就是,各地房东开始变相涨租。今年之所以搬走,就是为此,这两天同学也是如此。很多房东只认钱,别谈感情,伤钱。而对于这个城市来说,你怎么定位自己,你真把自己当成她的一份子?你来此为何?将来何去何从?自己掂量清楚。

    2016-12-05 10:03

  • 更多»

最新文章
热门文章
随机文章