OK,到此为止,FCK基本集成到您的web系统当中。但是目前出现了几个问题。
1. 上传文件是中文名称的会出现异常
2. 建立中文文件夹会出现异常
3. 图片默认是文件夹存储方式,读取图片也是文件路径形式,如果项目需求只能采用二进制流存储(比如说运行环境是云计算环境),则不得不去修改源码。
好的,基于以上问题我们刚刚下载的源代码就有用处了,我们不得不去修改它的源代码来满足我们的要求,呵呵,尤其是第三条,没办法,运行时环境所致……
修改源代码
1. 修改核心servlet
打开net.fckeditor.connector.ConnectorServlet,修改以下内容
在151行修改如下
newFolderStr = new String(newFolderStr.getBytes("iso8859-1"),"utf-8");
logger.debug("Parameter NewFolderName: {}", newFolderStr);
|
在242行的位置修改如下
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding("UTF-8");
|
这样在servlet中修改后的代码至少不会中文乱码了。
2. 修改web服务器的编码格式为UTF-8格式,所以如果您的web项目放到自己可以操作的linux下当然可以控制自己的服务器编码了,但如果您是放在ISP服务商提供的虚拟空间中,之前一定要确定他们的web服务器编码格式是UTF-8的,否则不支持中文文件上传的。
3. 下面我们解决存储流图片的问题,有时候项目需求需要将所有的文件以数据库二进制流形式进行存储,这样做的好坏笔者不想过多评论,根据实际情况来选择吧,比这只是给出修改代码解决。
还是先修改刚刚那个核心的servlet类
net.fckeditor.connector.ConnectorServlet
在代码的289行的uplFile.write(pathToSave);下面加上存二进制文件的代码
示例代码如下
//存图片对象
FCKImage fckImage = new FCKImage();
//存储图片流
InputStream inputStream = uplFile.getInputStream();
fckImage.setId(filename);
fckImage.setPictureContent(inputStream);
fckImage.setSize(uplFile.getSize());
FCKImageDAO fckImageDAO = new FCKImageDAO();
fckImageDAO.save(fckImage);
|
笔者这里建立了一个FCKImage实体,它的pictureContent是InputStream,用于存储图片。至于DAO代码嘛,网上很多代码,在此不再赘述。
之后还得修改一个类文件net.fckeditor.response. XmlResponse
这个类只要是对页面的AJAX调用后的反馈类,此时只需要修改它的setFiles()方法即可。
修改后的方法如下
/**
* Lists all files in the given dir as XML tags.
* 文件,应该从数据库中读取图片文件
* @param dir
*/
public void setFiles(File dir) {
if (filesElement != null) {
Element parent = (Element) filesElement.getParentNode();
parent.removeChild(filesElement);
}
filesElement = document.createElement("Files");
document.getDocumentElement().appendChild(filesElement);
FCKImageDAO fckImageDAO = new FCKImageDAO();
List<FCKImage> list = fckImageDAO.findAll();
for(FCKImage fckImage : list){
Element fileElement = document.createElement("File");
fileElement.setAttribute("name", fckImage.getId());
fileElement.setAttribute("size", "未知");
long length = 0;
if (fckImage.getSize() < 1024)
length = 1L;
else
length = fckImage.getSize()/1024;
fileElement.setAttribute("size", String.valueOf(length));
filesElement.appendChild(fileElement);
}
}
|
别忙,还有2个页面文件没有修改呢,
一个是/fckeditor/editor/dialog/fck_image/fck_image.js的OnUploadCompleted函数,修改如下:
function OnUploadCompleted( errorNumber, fileUrl, fileName, customMsg )
{
// Remove animation
window.parent.Throbber.Hide() ;
GetE( 'divUpload' ).style.display = '' ;
switch ( errorNumber )
{
case 0 : // No errors
alert( '文件已经上传成功' ) ;
break ;
case 1 : // Custom error
alert( customMsg ) ;
return ;
case 101 : // Custom warning
alert( customMsg ) ;
break ;
case 201 :
alert( '文件名已经存在,您上传的文件需要重新命名为 "' + fileName + '"' ) ;
break ;
case 202 :
alert( '无效的文件类型' ) ;
return ;
case 203 :
alert( "安全错误!您可能没有足够的权限来上传,请检查您的服务器。" ) ;
return ;
case 500 :
alert( '连接不可用' ) ;
break ;
default :
alert( '上传错误,代码: ' + errorNumber ) ;
return ;
}
var fileUrlArray = fileUrl.split("/");//全部分割
/**
* 指向显示流图片的jsp页面
*/
var showIOurl = "/showImage.jsp?fileId="+fileUrlArray[fileUrlArray.length-1];
sActualBrowser = '' ;
SetUrl( showIOurl ) ;
GetE('frmUpload').reset() ;
}
|
showImage.jsp页面是输出流图片的逻辑页面,稍后奉上源代码。
另一个就是
/fckeditor/editor/filemanager/browser/default/frmresourceslist.html的OpenFile函数。
修改如下:
function OpenFile( fileUrl )
{
//连接到显示流文件的jsp
var showIOurl = "/showImage.jsp?fileId="+fileUrl;
window.top.opener.SetUrl( showIOurl ) ;
window.top.close() ;
window.top.opener.focus() ;
}
|
可以看到,他们都调用了一个jsp页面,用于输出流文件的。
showImage.jsp代码如下:
分享到:
相关推荐
修改过上传中文名乱码,文件大小等,字体,工具栏自定义js,实用的东西,需要的朋友来拿,不忽悠!
废话不多说了,搞过web开发的人大概都知道FCKeditor是做为在线HTML编辑器的,类似于word的编辑试图和展现方式,实际上幕后依然...在使用fck中会遇到一些问题,大家需要修改一下它的源代码(还好它是开源的)才能解决。
本博客是仿照hi.baidu.com的功能所开发的。 文本编辑器采用的是FCK(和百度的一样) 相册是采用的.net初学者包里面的相册程序修改的。 逻辑层代码全部在AppCode里面,是初学者学习.net的一个好东西
2008博客源代码【.net课程设计,3层架构】 本博客是仿照hi.baidu.com的功能所开发的。 文本编辑器采用的是FCK(和百度的一样) 相册是采用的.net初学者包里面的相册程序修改的。 逻辑层代码全部在AppCode...
本文基于.Net的应用针对FCKEditor的源代码进行分析,同时改造了部分过于复杂的功能,将其简单化。供大家学习讨论之用 一、对"插入/编辑超链接"功能进行了彻底简化,不可否认源代码中考虑了超链接的几乎所有应用情景...
1、fck最新的最新源代码2.5和最新的2.64的页面文件, 2、并修改了所有上传文件有关的中文乱码问题; 乱码解决是修改了server.xml: connectionTimeout="20000" redirectPort="8443" URIEncoding="utf-8"/> ...
FCKeditor-java没有很好的解决中文问题需要我们修改它的源代码后重新编译打包打包过程如下: 1 新建一个web工程名字为FCKeditor-java-2.3,然后把FCKeditor-2.3-java.zip解压缩后的代码拷贝到工程目录下 2如果是用...
这个是一个我修改过的fckeditor for jsp 的jar包的源代码,是fckeditor-2.3的,我修改了ConnectorServlet.java和SimpleUploaderServlet.java两个文件 我在这两个文件中都是加了一个静态变量encoding,private static...
FCKeditor是一个专门使用在网页上属于开放源代码的所见即所得文字编辑器。它志于轻量化,不需要太复杂的安装步骤即可使用。它可和PHP、javascript、ASP、ASP.NET、ColdFusion、Java、以及ABAP等不同的编程语言相结合...
手工建站:需要美工设计,上传源代码等繁杂操作。 建站之星:在线购买,实时开通,免费赠送3级域名,只要短短2步设置,就能实现在线访问。 节省费用 手工建站:建站至少需要千元以上 建站之星:仅需几百元,...
手工建站:需要美工设计,上传源代码等繁杂操作。 建站之星:在线购买,实时开通,免费赠送3级域名,只要短短2步设置,就能实现在线访问。 节省费用 手工建站:建站至少需要千元以上 建站之星:仅需几百元,...
然后把下载的FCKeditor.Net.zip随便解压缩到你硬盘的一个空目录,里面是FCKeditor.Net的源代码,你可以对它进行再度开发,本文尚不涉及本内容,我们只是直接使用其目录下的"bin"Debug目录中的FredCK.FCKeditorV2.dll...
采用FCK 和 htmlarea 编辑器,灵活方便. 后台管理,包括: 基本设置 留言板名称 选择在线编辑器 每页显示留言条数 每条留言最大字符数 留言间隔时间 语句过滤 限制关键字 限制IP 数据备份 数据恢复 密码...