本文引用,原文地址:http://blog.sina.com.cn/s/blog_6b3ac3900100knoh.html
CKEditor功能强大,但在JSP中不支持图片的上传,解决方案如下:
实现方式: ckeditor_3.3 + struts2 ,用struts2的fileUploadStack实现
1. 下载ckeditor_3.3 ,目前最新版本是3.3,可以到官方网站上下载: http://ckeditor.com/download
2. 下载下来我们进行安装, 解压压缩文件,.解压缩后得到ckeditor的程序文件夹,里面一些无用的文件可以删除,比如例子_samples,未压缩的源代码_source等.只保留以下文件即可:
skins文件夹是皮肤文件夹,三种皮肤可任选其一。把这些整理好的文件放到项目WebRoot下。
3. 配置ckeditor:
在config.js中配置如下:
CKEDITOR.editorConfig = function( config ) {
config.language = 'zh-cn'; // 配置语言
config.uiColor = '#FFF'; // 背景颜色
config.width = '500px'; // 宽度
config.height = '180px'; // 高度
config.skin = 'office2003'; //界面v2,kama,office2003 为提高速度,只保留了office2003
config.toolbar =
[
['Source','Bold','Italic','Underline','Strike','-','Subscript','Superscript'],
['NumberedList','BulletedList','-','Outdent','Indent','TextColor'],
['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock','Maximize', 'ShowBlocks','-','Undo','Redo'],
['Image','Flash','Table','HorizontalRule','Smiley','SpecialChar','PageBreak'],
['Styles','Format','Font','FontSize','Preview']
]; //配置操作界面上的工具按钮
config.font_names = '宋体/宋体;黑体/黑体;仿宋/仿宋 _GB2312;楷体/楷体_GB2312;隶书/隶书;幼圆/幼圆;'+ config.font_names ;
}; //增加中文字体
4. 在页面中引用,如下:
<script type="text/javascript" src="ckeditor/ckeditor.js"></script> //当前JSP页面引入CKEditor
<textarea cols="80" id="content" rows="10">
</textarea>
<script type="text/javascript">
CKEDITOR.replace('content'); //content为textarea的id
</script>
效果如下:
点击图片按钮,效果图为
<!--EndFragment-->
该界面无法完成上传。
5. 在插入image对话框的URL文本框的旁边放一个我自己的Upload按钮,点击后页面转入我自己定义的文件/图片上传页面,接下来我自己处理upload的整个过程。最后返回一个url,通过这个url可以看到图片。
借助CKEditor强大的扩展能力,我们完全可以以javascript实现这一目标。
修改代码如下:
<textarea name="editor1" ></textarea>
<script type="text/javascript">
CKEDITOR.replace('editor1', addUploadButton(this));
function addUploadButton(editor){
CKEDITOR.on('dialogDefinition', function( ev ){
var dialogName = ev.data.name;
var dialogDefinition = ev.data.definition;
if ( dialogName == 'image' ){
var infoTab = dialogDefinition.getContents( 'info' );
infoTab.add({
type : 'button',
id : 'upload_image',
align : 'center',
label : '上传',
onClick : function( evt ){
var thisDialog = this.getDialog();
var txtUrlObj = thisDialog.getContentElement('info', 'txtUrl');
var txtUrlId = txtUrlObj.getInputElement().$.id;
addUploadImage(txtUrlId);
}
}, 'browse'); //place front of the browser button
}
});
}
function addUploadImage(theURLElementId){
var uploadUrl = "uploadsFiles.jsp"; //这是我自己的处理文件/图片上传的页面URL
var imgUrl = window.showModalDialog(uploadUrl);
//在upload结束后通过js代码window.returnValue=...可以将图片url返回给imgUrl变量。
//更多window.showModalDialog的使用方法参考
var urlObj = document.getElementByIdx_x(theURLElementId);
urlObj.value = imgUrl;
urlObj.fireEvent("onchange"); //触发url文本框的onchange事件,以便预览图片
}
</script>
说明:CKEditor的扩展基本上都是通过on方法实现的。on方法有2个参数,第一个是 CKEditor内部的各种事件名称,类似一个钩子。第二个参数是要扩展的代码,通常是一个js函数。因为我们要改动的是image对话框,所以对应的事件名称是dialogDefinition,对话框的名字是image。image url文本框在info选项卡内,通过getContents('info')定位到该选项卡,然后通过infoTab.add()方法就可以在选项卡内添加新的元素了。元素定义是JSON格式。我们这里定义了一个button,其中包括标签(label)和点击(onClick)以后要执行的动作(通常也是个js函数)。infoTab.add()第二个参数是用来指定新元素的位置-在该元素之前。如果不提供这个参数则新元素放在选项卡最后。我们在这里将这个新的Upload按钮放在CKEditor默认的browser按钮前面。
upload按钮点击后就是进行upload动作。这个是通过 addUploadImage()完成的。该函数接受一个id参数,用来指定upload完成后图片的url返回给哪个表单元素。通过查看源代码可知图片 URL文本框的id是txtUrl,但该id是CKEditor自己内部的id,不是页面上最终生成的HTML的id。不过CKEditor也提供了方法 getContentElement()和getInputElement()进行2者的转换。
addUploadImage函数内容也很简单,先指定我自己的文件上传页面的URL,然后在一个模态窗口中打开这个页面,处理文件上传的所有细节。最终的结果是将图片上传后在服务器上的URL地址返回给一个变量imgUrl。最后把这个变量赋值给传进来的图片URL文本框里。最后手工触发一下onchange事件,这样在image对话框里就能看到图片的预览效果了。
效果如下:
点击“上传”按钮:如图:
这是弹出的网页对话框:
其中代码如下:
<body>
<s:form action="fileUploadsss" method="post" name="pos"
enctype="multipart/form-data" target="smz">
<iframe name="smz" width="0" height="0" frameborder="0"
style="display: none" > </iframe>
<table width="80%" border="1" cellspacing="0" cellpadding="0">
<tr>
<td width="20%" align="right">
<font color="red">*</font>上传图片文件
</td>
<td width="20%">
<s:file name="myFile"></s:file>
<s:submit value="上传"></s:submit>
</tr>
</table>
</s:form>
<s:hidden name="pagePath" id="_page_path"></s:hidden>
</body>
<script type="text/javascript">
var _page_path = document.getElementByIdx_x("_page_path").value;
if(null!=_page_path && ""!=_page_path){
window.returnValue=_page_path;
window.close();
}
</script>
说明:《1》iframe name="smz" 是防止提交后页面跳转的,其中name与s:form的target字段相同
《2》s:hidden name="pagePath" 是后台向前台传递的图片在服务器的位置路径
《3》js: window.returnValue=_page_path; 是网页对话框向父页面传值
6:struts2上传配置(即点击上传按钮时要执行的程序)
web.xml中配置如下:
<filter>
<filter-name> struts-cleanup </filter-name >
<filter-class> org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>
</filter>
<filter-mapping >
<filter-name > struts-cleanup </filter-name >
<url-pattern > /* </url-pattern >
</filter-mapping >
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
在struts.xml中配置如下:
<action name ="fileUploadsss" class="com.ccit.FileUploadAction" >
<interceptor-ref name ="fileUploadStack" />
<result name ="success">/uploadsFiles.jsp</result >
</action>
处理上传action代码:
public class FileUploadAction extends ActionSupport {
private static final long serialVersionUID = 572146812454l ;
private static final int BUFFER_SIZE = 300 * 1024;
private File myFile; //网页中file字段的name
private String contentType; //struts2中必须字段,主要是set方法
private String fileName; // struts2中必须字段,主要是set方法
private String imageFileName; //要上传的图片在服务器中的名称
private String imagePath; //保存服务器中的路径
private String pagePath; //页面中要引用的url
public String getPagePath() {
return pagePath;
}
public void setPagePath(String pagePath) {
this.pagePath = pagePath;
}
public String getImagePath() {
return imagePath;
}
public void setImagePath(String imagePath) {
this.imagePath = imagePath;
}
public void setMyFileContentType(String contentType) {
this.contentType = contentType;
}
public void setMyFileFileName(String fileName) {
this.fileName = fileName;
}
public void setMyFile(File myFile) {
this .myFile = myFile;
}
public String getImageFileName() {
return imageFileName;
}
private static void copy(File src, File dst) {
try {
InputStream in = null ;
OutputStream out = null ;
try {
in = new BufferedInputStream( new FileInputStream(src), BUFFER_SIZE);
out = new BufferedOutputStream( new FileOutputStream(dst), BUFFER_SIZE);
byte [] buffer = new byte [BUFFER_SIZE];
while (in.read(buffer) > 0 ) {
out.write(buffer);
}
} finally {
if ( null != in) {
}
if ( null != out) {
out.close();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public String execute() {
imageFileName = new Date().getTime() + fileName; //此名称用当前时间与上传图片名组成
imagePath = ServletActionContext.getServletContext().getRealPath( "/ckeditor/images/Image" ) + "/" + imageFileName;
System.out.println(imagePath);
pagePath = getWebPath() + "ckeditor/images/Image" + "/" + imageFileName; //页面引用位置
System.out.println(pagePath);
File imageFile = new File(imagePath);
copy(myFile, imageFile);
return SUCCESS;
}
private String getWebPath(){
HttpServletRequest request = ServletActionContext.getRequest ();
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
return basePath;
}
}
7. 上传完成页面如图:
分享到:
相关推荐
CKEditor图片上传和远程图片下载功能是其核心特性之一,允许用户不仅能在本地上传图片,还能从互联网上抓取并下载远程图片到服务器,然后在编辑器中显示。 一、CKEditor图片上传 CKEditor的图片上传功能通常涉及到...
**ckeditor 图片上传** CKEditor 是一款非常流行的开源富文本编辑器,广泛应用于网页内容编辑。在CKEditor中实现图片上传功能是许多开发者在构建网站时必须面对的问题。本篇文章将深入探讨如何在CKEditor中集成图片...
ckeditor实现 视频上传CKEditor 是新一代的 FCKeditor,是一个重新开发的版本。CKEditor 是全球最优秀的网页在线文字编辑器之一,因其惊人的性能与可扩展性而广泛的被运用于各大网站。
在CKEditor中,图片上传功能是通过与服务器端的交互来实现的,而这个交互过程通常涉及到一个后端处理文件。在本案例中,我们关注的是一个基于PHP编写的服务器端处理文件——`upload.php`,它专门用于处理CKEditor的...
然而,原版的CKEditor可能并不包含所有开发者或用户所需的功能,例如内置的图片上传功能。本教程将重点讲解如何为CKEditor添加自定义的图片上传功能,并提供相应的源代码。 首先,我们需要理解CKEditor的工作原理。...
1. **CKEDITOR图片上传基础** CKEDITOR支持多种图片上传方式,包括基于HTML5的File API、Flash插件以及通过服务器端处理。本地上传图片功能主要是让用户在编辑器内选择本地图片并将其上传到服务器,然后将图片的URL...
4. 响应处理:如何构造并返回一个合适的响应,告诉CKEditor图片上传是否成功以及图片的URL。 5. 测试与调试:如何通过JSP页面测试图片上传的功能,确保其正常工作。 以上就是关于"ckeditor上传图片"这一主题的详细...
本文将深入探讨如何将CKEditor与图片上传功能整合,以实现用户在编辑过程中直接上传图片。 一、CKEditor简介 CKEditor是一款功能强大的在线文本编辑器,支持多种语言,广泛用于网站内容管理、论坛和博客等。它提供...
在使用ckeditor作为富文本编辑器时,经常需要集成图片上传功能。ckeditor是一款强大的在线文本编辑器,它提供了丰富的文本格式化工具,使得在网页上编辑内容变得简单。然而,ckeditor默认的图片上传功能可能无法满足...
5. **返回响应**:最后,JSP页面需要构建一个JSON或HTML响应,告诉CKEditor图片上传的结果。如果成功,应提供新图片的URL;如果失败,应包含错误信息。 在实际开发中,我们还需要考虑一些安全和性能问题,比如限制...
在ASP.NET环境中集成CKEditor并实现图片上传功能是一项常见的需求,尤其对于内容管理或博客系统而言。CKEditor是一款强大的富文本编辑器,它允许用户在网页上编辑HTML内容,包括插入图片、链接、表格等元素。下面将...
在实现CKEditor图片上传时,我们首先要在前端设置CKEditor的配置。CKEditor允许自定义配置项,比如图片上传的URL。在初始化CKEditor时,我们需要指定一个服务器端的处理图片上传请求的Action,例如: ```javascript...
在CKEditor中实现图片上传功能,通常会结合后端框架如Struts2进行处理。本文将深入探讨如何利用CKEditor与Struts2实现图片上传的功能。 首先,我们需要在CKEditor的配置中启用图片上传功能。这可以通过修改CKEditor...
Java版本的CKeditor图片上传浏览服务端组件则是针对Java开发者设计的,用于处理CKeditor中的图片上传请求,并且与之配合实现图片预览。 该组件的核心功能包括: 1. **图片上传**:当用户在CKeditor中选择插入图片...
快速图像上传-CKEditor Upload Image 把ckeditplug.zip解压到 drupal8目录下的libraries目录 路径如下/...这个模块使用了Drupal Image CKEditor插件的设置和功能来上传图像,可通过拖放或从剪贴板粘贴自动上传图片。
实现CKEditor图片上传到Struts2的步骤大致如下: 1. **配置CKEditor**:首先,在CKEditor的配置中,我们需要设置图片上传的URL,该URL指向Struts2的Action,例如`/upload/image.action`。同时,可能还需要配置...
本文将深入探讨如何定制CKEditor中的图片上传框,以便更好地适应不同的项目需求。 首先,我们要明白CKEditor的图片上传功能是通过一个插件实现的,这个插件叫做`image2`。在默认配置中,当用户点击“插入图片”按钮...
首先,CKEditor的图片上传功能通常通过其插件`CKFinder`实现。`CKFinder`是一个文件管理器,可以与CKEditor无缝集成,提供上传、浏览和管理服务器上的图片和文件的能力。在配置CKFinder时,你需要设置服务器端的连接...
本篇文章将重点讲解如何在CKEditor中实现图片上传功能,并将上传的图片记录到数据库中。 首先,我们需要理解CKEditor中的图片上传流程。当用户在编辑器中选择插入图片时,CKEditor会调用一个服务器端的脚本来处理...