FCKeditor 2

FCKeditor文件上传

Jar包:

 

帮助文档:

 

Site文件夹下的index.html文件

 

通过帮助文档我们知道了,要成功实现上传下载功能,一共分为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文件夹下的editor文件夹下的filemanager文件夹browser文件夹下default文件夹js文件夹下的frmupload.html文件

我们来查看一下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-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上传文件类型,要从客户端和服务器两方面修改

服务端

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

帮助文档:

 

我们从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类,除了内容全部拷贝FCKeditorUploadResponse类的内容外,需要增加一个错误常量和一个错误方法:

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 ;

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值