FCK上传图片(文件)绝对路径保存的实现

作为web的富文本编辑器FCK大家应该不会陌生吧,最近项目中遇到一个问题,那就是每次重新启动服务器时通过FCK上传的
文件全丢失,这可能是服务器每次重启都要重新通过war部署应用程序所致。
目前有3中方案可以解决上述问题:


1、写个后台进程专门维护FCK上传的文件。
2、位FCK专门部署一个服务器。
3、重新实现FCK的上传和下载功能(是文件可以上传到任意指定的路径,非应用程序的相对路径)。

 不知网络大侠门还有没有别的解决方案,大家功能学习。
在上述方案中,第一种方案主要是在服务重启前后移动文件夹来实现的,当文件大时维护起来比较耗时,也可能在移动过程中
由于外界原因导致文件丢失。第二种方案要为FCK搭建个服务器,维护起来比较麻烦。想来想去还是用第三种方案比较合适。
 
经过阅读FCK的源码,终于找到了实现方法。现就具体的实现写下来,供网友参考,有不对的,不够合理的地方还望指正。

首先我们完成把文上传到指定的目录中。为了能满足需求我们需要实现FCK的Connector接口。在这个接口中声明了这么几个方法需
要我们去实现:
init(final ServletContext servletContext);
fileUpload(final ResourceType type, final String currentFolder, final String fileName,final InputStream inputStream)
createFolder(final ResourceType type, final String currentFolder, final String newFolder)
getFiles(ResourceType type, String currentFolder)
getFolders(final ResourceType type, final String currentFolder)
下面是Connector接口的实现类ContextConnector
  

上述ContextConnector类中用到的UtilsPath工具类的代码如下:

为了使上传的文件跨平台(目前只支持liunx和windwos)还需要当前用的系统。工具类如下:

为了实现上传路径可灵活配置还需要写个读取配置文件的工具类:

到此为把文件上传到指定路径的功能已经基本实现,只要让FCK调用我们的ContextConnector类就可以了,怎么去让FCK调用我们自己
实现的这个ContextConnector类呢,只要配置一下配置文件就可以了。只要在FCK的配置文件中添加如下配置文件即可:
connector.impl=com.bzlccn.oa.common.fck.ContextConnector

下面就是把我们上传的文件怎么显示的问题。实现是这样的,首先我们要自己写个下载文件的servlet,具体代码如下:

为了让FCK显示图片的时候调用我们的FCKDownloadServlet还需去重载ServerRootPathBuilder类中的getUserFilesPath方法,实现如下

上述类中getUserFilesPath方法主要就是获取显示文件的路径。怎么让FCK调用我们的getUserFilesPath方法的,通要的还是要
向FCK配置文件中写入:
connector.userPathBuilderImpl = com.bzlccn.oa.common.fck.ContextPathBuilder
哈哈,这样就可以了,等等,还没有完呢,还得需要配置FCKDownloadServlet呢,在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>
  <servlet-name>FCKDownloadServlet</servlet-name>
  <servlet-class>com.bzlccn.oa.common.fck.FCKDownloadServlet</servlet-class>
 </servlet>


 <servlet-mapping>
  <servlet-name>ConnectorServlet</servlet-name>
  <!-- Do not wrap this line otherwise Glassfish will fail to load this file -->
  <url-pattern>/fckeditor/editor/filemanager/connectors/*</url-pattern>
 </servlet-mapping>
       
    <servlet-mapping>
  <servlet-name>FCKDownloadServlet</servlet-name>
  <url-pattern>/fck/download.servlet</url-pattern>
 </servlet-mapping>

下面再把FCK的整体配置文件贴出来:
connector.userActionImpl=net.fckeditor.requestcycle.impl.EnabledUserAction
connector.impl=com.bzlccn.oa.common.fck.ContextConnector
connector.userPathBuilderImpl = com.bzlccn.oa.common.fck.ContextPathBuilder
fck.windows.path=c:/oa/fck
fck.linux.path=/home/oa/fck
还需要说明一点就是我们用的FCK的版本是2.6.5
写的有点匆忙,难免有不妥之处望指正,多拍砖。

实现效果如图:

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值