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代码如下:
分享到:
相关推荐
标题中的"FCK配置过的源代码"指的是该压缩包包含了一份已经经过个性化配置的FCKeditor源代码,主要涉及了上传功能、字符编码、文件大小限制以及界面定制等方面。 1. **上传中文名乱码问题** 在处理非英文文件名时...
开源FCK编辑器是一款在IT领域中广受欢迎的富文本编辑器,它的源代码完全开放,允许用户根据自己的需求进行定制和扩展。这个编辑器以其强大的功能和灵活的可配置性,深受编程爱好者和Web开发者的喜爱。在本文中,我们...
标签包括"源码"和"工具",这暗示了博客内容可能会涉及FCKeditor的源代码分析,可能是如何自定义编辑器的功能,或者对源代码进行二次开发。同时,也可能讨论了FCKeditor作为开发工具的使用方法,如何在项目中集成它,...
标签中的“FCK 源码”表明这个压缩包可能包含了FCKeditor的源代码,开发者可以查看、修改或扩展编辑器的功能,满足特定需求。对于学习富文本编辑器开发或者想要定制化FCKeditor的人来说,源码是十分宝贵的资源。 ...
5. **源码查看与预览**:用户可以切换到源代码模式查看和编辑HTML代码,同时也可以实时预览编辑效果。 6. **兼容性**:FCKeditor对HTML和XHTML标准有良好的支持,能够生成符合W3C标准的代码。 **使用FCKeditor的...
5. **源代码与预览模式**:用户可以在源代码模式下直接编辑HTML,也可以在预览模式下查看编辑效果。 二、FCKeditor的主要功能: 1. **富文本编辑**:支持基本的文本格式化,如加粗、斜体、下划线、字体大小和颜色...
通过深入研究FCKeditor的文档和源代码,你可以实现更复杂的自定义,比如改变颜色、字体大小,甚至添加自定义功能。记住,每次修改后都要测试,确保编辑器的功能正常运行,同时保持良好的用户体验。
1. **下载与解压**:首先,你需要从FCKweb编辑器的官方网站或者源代码仓库下载源代码,然后解压到本地目录。 2. **导入项目**:在Eclipse中,通过"File" -> "Import" -> "Existing Projects into Workspace"将...
本博客是仿照hi.baidu.com的功能所开发的。 文本编辑器采用的是FCK(和百度的一样) 相册是采用的.net初学者包里面的相册程序修改的。 逻辑层代码全部在AppCode里面,是初学者学习.net的一个好东西
6. **源码编辑模式**:除了WYSIWYG(所见即所得)模式外,还提供了源代码编辑模式,用户可以直接编辑HTML代码。 7. **配置灵活性**:FCKeditor允许开发者通过修改配置文件来定制编辑器的行为,例如调整工具栏布局、...
在【标题】"FCK编辑器源码工程"中,我们关注的是FCKeditor的源代码及其开发环境的构建。 **源码分析** FCKeditor的源码主要由JavaScript编写,兼容多种浏览器,包括Internet Explorer、Firefox、Chrome等。源码...
4. **HTML代码查看**:允许用户在源代码视图下编辑HTML,适合有HTML基础的用户进行精细调整。 5. **多语言支持**:FCKeditor支持多种语言,包括简体中文,方便不同地区的用户使用。 6. **自定义配置**:开发者可以...
6. **源码查看**:用户可以直接查看和编辑HTML源代码。 7. **样式和模板**:预设多种样式和模板,方便快速应用页面布局。 **二、FCKeditor的安装与配置** 1. **下载**:从官方网站或者第三方资源站点下载...
- **源代码查看**:切换到源码模式,直接编辑HTML代码。 3. **事件处理**:FCKeditor提供了丰富的API,可以监听编辑器的各种事件,如`OnBlur`、`OnFocus`、`OnLoad`等,以便进行自定义功能扩展。 4. **保存内容**...
1. 当使用非官方渠道获取的FCKeditor时,可能存在精简版或旧版本的问题,这可能导致某些功能缺失或兼容性问题,因此推荐从官方源获取最新版本。 2. FCKeditor 2.6版本与之前的版本有较大区别,2.6版本以后的版本可以...
关于压缩包内的文件“FCK-编辑器”,这可能是包含了FCKeditor的所有源代码、示例、文档以及可能的配置文件。开发者可以通过解压并研究这些文件来了解FCKeditor的内部结构,或者根据自己的项目需求进行二次开发。 ...
5. 更新FCKeditor的图片源URL,指向新生成的带水印图片。 在FCKeditor的配置中,我们需要修改或添加一些设置以支持批量上传和水印功能。例如,可能需要修改`fckconfig.js`文件中的`FileBrowserUploadUrl`参数,使其...
总的来说,通过理解和修改FCKeditor的源代码以及服务器端的上传处理逻辑,我们可以使FCKeditor支持中文图片名称的上传。这不仅扩展了FCKeditor的功能,也使其更加适应中文用户的使用习惯。对于想要深入学习和掌握...