FCKeditor上传图片共享问题解决方案

    在我参与的这个项目中,使用了FCKeditor作为文本编辑器,该编辑器有图片、Flash等的上传功能,上传的图片和Flash在Web应用的UserFiles文件夹中。我们的这个系统的后台是在政务网上的,有两台服务器进行负载均衡,因此经常会出现在一台机器上上传的图片,在另外一台机器上看不到图片的问题,另外还有一个问题就是该系统的前台展现是在公网上的,数据库通过网闸进行同步,但是图片因为在文件夹中,不能进行同步。为了解决这个问题,我设计了如下方案,并且对该功能进行了实现。

方案描述

    在图片上传的时候,将图片同时上传到数据库中,在展现图片的时候,先判断图片在本地是否存在,如果不存在,则从数据库中将文件下载到对应的目录下再展现。对于文件名的问题,因为文件很可能重名,为了解决文件重名的问题,我直接把文件名替换成了当前日期。各个应用可以配置相应的前缀,避免重复。

实现方案

    FCKeditor通过两个Servlet进行图片上传,分别是com.fredck.FCKeditor.connector.ConnectorServlet和com.fredck.FCKeditor.uploader.SimpleUploaderServlet,对这两个Servlet进行改造,添加两个参数,分别为saveToDatabase和namePrefix。

    saveToDatabase控制是否保存到数据库中,如果设置为true,则将图片上传到数据库中。

    namePrefix为文件名的前缀,用于避免不同的服务器上传文件同名的问题。

    文件下载实现,通过过滤器对UserFiles路径进行过滤,得到文件名之后,检查本地文件是否存在,如果不存在,根据文件名从数据库中查找,如果找到,则下载文件,否则转到默认图片上,提示图片文件不存在。

配置说明

Filter配置

ContractedBlock.gif ExpandedBlockStart.gif Code
 <filter>
  
<filter-name>FCKeditorFileFilter</filter-name>
  
<filter-class>com.sinosoft.web.filter.FCKeditorFileFilter</filter-class>
 
</filter>
 
<filter-mapping>
  
<filter-name>FCKeditorFileFilter</filter-name>
  
<url-pattern>/UserFiles/*</url-pattern>
 
</filter-mapping>

 Servlet配置

ContractedBlock.gif ExpandedBlockStart.gif Code
 <servlet>
  
<servlet-name>Connector</servlet-name>
  
<servlet-class>com.fredck.FCKeditor.connector.ConnectorServlet</servlet-class>
  
<init-param>
   
<param-name>baseDir</param-name>
   
<param-value>/UserFiles/</param-value>
  
</init-param>
  
<init-param>
   
<param-name>debug</param-name>
   
<param-value>true</param-value>
  
</init-param>
  
<init-param>
   
<param-name>saveToDatabase</param-name>
   
<param-value>true</param-value>
  
</init-param>
  
<init-param>
   
<param-name>namePrefix</param-name>
   
<param-value>connect</param-value>
  
</init-param>
  
<load-on-startup>1</load-on-startup>
 
</servlet>
 
<servlet>
  
<servlet-name>SimpleUploader</servlet-name>
  
<servlet-class>com.fredck.FCKeditor.uploader.SimpleUploaderServlet</servlet-class>
  
<init-param>
   
<param-name>baseDir</param-name>
   
<param-value>/UserFiles/</param-value>
  
</init-param>
  
<init-param>
   
<param-name>debug</param-name>
   
<param-value>true</param-value>
  
</init-param>
  
<init-param>
   
<param-name>enabled</param-name>
   
<param-value>true</param-value>
  
</init-param>
  
<init-param>
   
<param-name>AllowedExtensionsFile</param-name>
   
<param-value/>
  
</init-param>
  
<init-param>
   
<param-name>DeniedExtensionsFile</param-name>
   
<param-value>php|php3|php5|phtml|asp|aspx|ascx|jsp|cfm|cfc|pl|bat|exe|dll|reg|cgi</param-value>
  
</init-param>
  
<init-param>
   
<param-name>AllowedExtensionsImage</param-name>
   
<param-value>jpg|gif|jpeg|png|bmp</param-value>
  
</init-param>
  
<init-param>
   
<param-name>DeniedExtensionsImage</param-name>
   
<param-value/>
  
</init-param>
  
<init-param>
   
<param-name>AllowedExtensionsFlash</param-name>
   
<param-value>swf|fla</param-value>
  
</init-param>
  
<init-param>
   
<param-name>DeniedExtensionsFlash</param-name>
   
<param-value/>
  
</init-param>
  
<init-param>
   
<param-name>saveToDatabase</param-name>
   
<param-value>true</param-value>
  
</init-param>
  
<init-param>
   
<param-name>namePrefix</param-name>
   
<param-value>simpleuploader</param-value>
  
</init-param>
  
<load-on-startup>1</load-on-startup>
 
</servlet>
 
<servlet-mapping>
  
<servlet-name>Connector</servlet-name>
  
<url-pattern>/editor/filemanager/browser/default/connectors/jsp/connector</url-pattern>
 
</servlet-mapping>
 
<servlet-mapping>
  
<servlet-name>SimpleUploader</servlet-name>
  
<url-pattern>/editor/filemanager/upload/simpleuploader</url-pattern>
 
</servlet-mapping>

数据库表支持(目前只针对Oracle,如果对其他数据库应该也是可以的)

ContractedBlock.gif ExpandedBlockStart.gif Code
ExpandedBlockStart.gifContractedBlock.gif/**//*==============================================================*/
ExpandedBlockStart.gifContractedBlock.gif
/**//* DBMS name:      ORACLE Version 9i2                           */
ExpandedBlockStart.gifContractedBlock.gif
/**//* Created on:     2009-4-30 15:14:49                           */
ExpandedBlockStart.gifContractedBlock.gif
/**//*==============================================================*/


drop table FCK_UPLOAD_FILES cascade constraints;

ExpandedBlockStart.gifContractedBlock.gif
/**//*==============================================================*/
ExpandedBlockStart.gifContractedBlock.gif
/**//* Table: FCK_UPLOAD_FILES                                      */
ExpandedBlockStart.gifContractedBlock.gif
/**//*==============================================================*/
create table FCK_UPLOAD_FILES  (
   FUF_ID               
INTEGER                         not null,
   
FILE_NAME            VARCHAR2(256)                   not null,
   FILE_CONT            BLOB,
   IP_ADDR              
VARCHAR2(32),
   UPLD_DATE            DATE                            
not null,
   
constraint PK_FCK_UPLOAD_FILES primary key (FUF_ID)
);

comment 
on table FCK_UPLOAD_FILES is
'在该表中记录上传的文件';

转载于:https://www.cnblogs.com/liwp_Stephen/articles/1452395.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值