FCKeditor 2

系统 2152 0

FCKeditor 文件上传

Jar 包:

 

帮助文档:

FCKeditor 2

 

Site 文件夹下的 index.html 文件

FCKeditor 2  

通过帮助文档我们知道了,要成功实现上传下载功能,一共分为 2 两个步骤:

第一步

我们查看到了 web.xml 中提供的 servlet ,那我我就就把他放大我们项目中的 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 >

        /fckeditor/editor/filemanager/connectors/* <!-- 映射到指定的 url 位置 -->

      </ url-pattern >

</ servlet-mapping >

第二步

在项目 src 文件下新建一个文本文件,名字: fckeditor.properties (注意:文件名称一定要相同),在文件中编写: connector.userActionImpl=net.fckeditor.requestcycle.impl.EnabledUserAction

大功告成!来看看效果图吧!

上传按钮也同理,爽吧 ~~~

FCKeditor 2

FCKeditor 2

FCKeditor 2

上传中文乱码

但是,我们在上传过程中会遇到很多问题,其中要上传的文件名称为中文时,我们上传到服务器上的文件名称就会变成乱码。

解决方案:

首先,我们遇到这这样的问题,我们要先检查项目中 fckeditor 文件夹下的 editor 文件夹下的 filemanager 文件夹 browser 文件夹下 default 文件夹 js 文件夹下的 frmupload.html 文件

FCKeditor 2

FCKeditor 2

我们来查看一下 frmupload.html 文件:

< meta http-equiv = "Content-Type" content = "text/html; charset=utf-8" > <!— 我们可以看到 在使用 getPost 时 我们采用的是 UTF-8 编码格式 所以 frmupload.html 没有问题 -->

< link href = "browser.css" type = "text/css" rel = "stylesheet" >

< script type = "text/javascript" src = "js/common.js" ></ script >

< script type = "text/javascript" >

 

既然 frmupload.html 文件没有问题,那么我们就来检查一下是不是 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 > /fckeditor/editor/filemanager/connectors/* <!-- 映射到指定的 url 位置 -->

</ url-pattern >

</ servlet-mapping >

我们通过 web.xml 文件中的上传文件配置可以看出,配置文件调用了 net.fckeditor.connector.ConnectorServlet 文件,那么我们接下来就来找到 ConnectorServlet 文件。

发现无法打开啊,这是我就需要调用 fckeditor-java-2.6-src.zip

FCKeditor 2

好了,通过 fckeditor-java-2.6-src.zip 包的帮助,我们顺利查看到了 ConnectorServlet 文件的源码,但是我们是不能在这对 ConnectorServlet 文件进行修改的,那我们不妨把他复制出去,我们想怎么改就怎么改。

在项目 src 包中创建 net.igit.fckeditor.connector 包(可以定义),在自定义的包下新建 ConnectorServlet.Class 文件,把我们的从源码中复制来的源码粘贴过来,我们不需要动它的任何源码,只需要把报错的地方导包即可。

FCKeditor2.6 以后, FCKeditor 把主要修改上传功能权限的修改都放在了 fckeditor-java-core-2.6.jar 中的 net.fckeditor.connector 包中的 Dispatcher.class 文件下,同理,我们也在自定义的 net.igit.fckeditor.connector 包下新建一个 Dispatcher.class 文件,把 Dispatcher.class 文件的源码复制过去,报错的地方导包。

Dispatcher.class 文件下修改:

源码:

UploadResponse doPost( final HttpServletRequest request) {

logger .debug( "Entering Dispatcher#doPost" );

……

try {

     List<FileItem> items = upload.parseRequest(request);

……

}

修改后:

GetResponse doGet( final HttpServletRequest request) {

     logger .debug( "Entering Dispatcher#doGet" );     

……

upload.setHeaderEncoding("UTF-8");   // 自己改动 解决上传中文名文件出现乱码问题

try {

     List<FileItem> items = upload.parseRequest(request);

……

}

 

创建中文名目录出现乱码问题

修改 Dispatcher

源码:

GetResponse doGet( final HttpServletRequest request) {

     logger .debug( "Entering Dispatcher#doGet" );

     ……

try {

         if (command.equals(Command. CREATE_FOLDER )) {

              String newFolderNameStr = request

         ……

}

修改后:

GetResponse doGet( final HttpServletRequest request) {

     logger .debug( "Entering Dispatcher#doGet" );

     ……

if (command.equals(Command. CREATE_FOLDER )) {

         String tempStr = request.getParameter( "NewFolderName" );

              try {

                   tempStr = new String(tempStr.getBytes( "iso8859-1" ), "UTF-8" );     

} catch (UnsupportedEncodingException e) {

                   e.printStackTrace();

              }

              String newFolderNameStr = tempStr;   

……

}

引用中文名图片无法正常显示

修改 Dispatcher

源码:

UploadResponse doPost( final HttpServletRequest request) {

     logger .debug( "Entering Dispatcher#doPost" );

     ……

String fileName = FilenameUtils. getName (uplFile.getName());

     logger .debug( "Parameter NewFile: {}" , fileName);

     ……

}

修改后:

UploadResponse doPost( final HttpServletRequest request) {

     logger .debug( "Entering Dispatcher#doPost" );

     ……

String fileName = FilenameUtils. getName (uplFile.getName());   

     ……

String filrNameX = fileName.substring(0, fileName.indexOf( "." ));   

     String extensionStr = fileName.substring(fileName.indexOf( "." ));   

     filrNameX = UUID. randomUUID ().toString()+extensionStr;   

     fileName = filrNameX;   

     logger .debug( "Parameter NewFile: {}" , fileName);   

……

}

上传文件格式设置

我们要修改 FCKeditor 上传文件类型,要从客户端和服务器两方面修改

服务端

从服务端修改,我们就要参考文档:

帮助文档:

  FCKeditor 2

我们从 Referenced Libraries fckeditor-java-core-2.6.jar 下的 net.fckeditor.handlers 包中的 default..properties 文件中:

connector.resourceType.file.extensions.allowed = 7z|aiff|asf|avi|bmp|csv|doc|fla|flv|gif|gz|gzip|jpeg|jpg|mid|mov|mp3|mp4|mpc|mpeg|mpg|ods|odt|pdf|png|ppt|pxd|qt|ram|rar|rm|rmi|rmvb|rtf|sdc|sitd|swf|sxc|sxw|tar|tgz|tif|tiff|txt|vsd|wav|wma|wmv|xls|xml|zip

connector.resourceType.image.extensions.allowed = bmp|gif|jpeg|jpg|png

connector.resourceType.flash.extensions.allowed = swf|fla

connector.resourceType.media.extensions.allowed = aiff|asf|avi|bmp|fla|flv|gif|jpeg|jpg|mid|mov|mp3|mp4|mpc|mpeg|mpg|png|qt|ram|rm|rmi|rmvb|swf|tif|tiff|wav|wma|wmv

粘贴到自定义的 fckeditor.properties 文件中修改

客户端

找到 fckeditor 文件夹下的 fckconfig.js 文件,找到:

FCKConfig.LinkUploadAllowedExtensions = ".(7z|aiff|asf|avi|bmp|csv|doc|fla|flv|gif|gz|gzip|jpeg|jpg|mid|mov|mp3|mp4|mpc|mpeg|mpg|ods|odt|pdf|png|ppt|pxd|qt|ram|rar|rm|rmi|rmvb|rtf|sdc|sitd|swf|sxc|sxw|tar|tgz|tif|tiff|txt|vsd|wav|wma|wmv|xls|xml|zip)$" ;         

FCKConfig.ImageUploadAllowedExtensions     = ".(jpg|gif|jpeg|png|bmp)$" ;

FCKConfig.FlashUploadAllowedExtensions     = ".(swf|flv)$" ;

粘贴到自定义的 myconfig.js 文件中修改

 

上传文件大小控制

修改 Dispatcher

源码:

UploadResponse doPost( final HttpServletRequest request) {

     logger .debug( "Entering Dispatcher#doPost" );

    ……

if (type.isDeniedExtension(FilenameUtils. getExtension (fileName)))

         uploadResponse = UploadResponse. getInvalidFileTypeError ();

         // Secure image check (can't be done if QuickUpload)

         else if (type.equals(ResourceType. IMAGE )

         && PropertiesLoader. isSecureImageUploads ()

         && !UtilsFile. isImage (uplFile.getInputStream())) {

         uploadResponse = UploadResponse. getInvalidFileTypeError ();

     } else {

         ……

}

修改后:

UploadResponse doPost( final HttpServletRequest request) {

     logger .debug( "Entering Dispatcher#doPost" );

……

if (type isDeniedExtension(FilenameUtils. getExtension (fileName))) {

         uploadResponse = UploadResponse. getInvalidFileTypeError ();

         } else if (type.equals(ResourceType. IMAGE )

              && PropertiesLoader. isSecureImageUploads ()

              && !UtilsFile. isImage (uplFile.getInputStream())) {

              uploadResponse = UploadResponse. getInvalidFileTypeError ();

         } else if (uplFile.getSize() > 10 * 1024) { // 检查文件大小

              uploadResponse = UploadResponse

              . getInvalidCurrentFolderError ();

         } else {

……

}

自定义的 UploadResponse 类,除了内容全部拷贝 FCKeditor UploadResponse 类的内容外,需要增加一个错误常量和一个错误方法:

public static final int EN_INVALID_FILE_SIZE_ERROR = 204;

     public static UploadResponse getInvalidFileSizeError() {

         LocalizedMessages lm = LocalizedMessages. getInstance (ThreadLocalData. getRequest ());

         return new UploadResponse( EN_INVALID_FILE_SIZE_ERROR , lm.getInvalidFileTypeSpecified());

}

以上服务器端修改完成。然后需要修改 WebRoot/fckeditor/editor/dialog/fck_image/fck_image.js 文件。在其中加入对我们新定义的 205 方法的 alert 语句:
case 204 : alert( "A file is too big. You should change the file" ) ;
return ;

都是自己学到的东西 大家如果有什么问题 可以一起探究 呵呵

FCKeditor 2


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论