Extjs的HtmlEidtor富文本编辑器的使用和图片上传显示的实现
一.HtmlEditor增加上传图片的功能
因为Extjs的富文本编辑器默认没有上传图片的功能,所以我们这里写一个js文件,继承Extjs的HtmlEditor,给其增加上传图片的功能。
(在需要用的地方引入该js文件即可)
StarHtmleditor.js:
var HTMLEditor = Ext.extend(Ext.form.HtmlEditor, {
addImage : function() {
var editor = this;
var imgform = new Ext.FormPanel({
region : 'center',
labelWidth : 55,
frame : true,
bodyStyle : 'padding:5px 5px 0',
autoScroll : true,
border : false,
fileUpload : true,
items : [{
xtype : 'textfield',
fieldLabel : '选择文件',
id : 'uploadFile',
name : 'uploadFile',
inputType : 'file',
allowBlank : false,
blankText : '文件不能为空',
anchor : '90%'
}],
buttons : [{
text : '上传',
handler : function() {
if (!imgform.form.isValid()) {return;}
imgform.form.submit({
waitMsg : '正在上传......',
url : 'uploadImage.ftl?doType=uploadImage',
success : function(form, action) {
var element = document.createElement("img");
var fileURL = action.result.fileURL;
element.src = 'showImg.ftl?doType=showImg&imgName=' + fileURL;
if (Ext.isIE) {
editor.insertAtCursor(element.outerHTML);
} else {
var selection = editor.win.getSelection();
if (!selection.isCollapsed) {
selection.deleteFromDocument();
}
selection.getRangeAt(0).insertNode(element);
}
//win.hide();//原始方法,但只能传一个图片
//更新后的方法
form.reset();
win.close();
},
failure : function(form, action) {
form.reset();
if (action.failureType == Ext.form.Action.SERVER_INVALID)
Ext.MessageBox.alert('警告','上传失败',action.result.errors.msg);
}
});
}
}, {
text : '关闭',
handler : function() {
win.close(this);
}
}]
})
var win = new Ext.Window({
title : "上传图片",
width : 300,
height : 200,
modal : true,
border : false,
iconCls : path + "/images/picture.png",
layout : "fit",
items : imgform
});
win.show();
},
createToolbar : function(editor) {
HTMLEditor.superclass.createToolbar.call(this, editor);
this.tb.insertButton(16, {
cls : "x-btn-icon",
icon : path + "/images/picture.png",
handler : this.addImage,
scope : this
});
}
});
Ext.reg('StarHtmleditor', HTMLEditor);
(1).上传图片的URL:
(2).显示图片的URL:
图示:
二.使用该富文本编辑器上传图片:
1.引入js文件:
<script type="text/javascript" src="<%=request.getContextPath()%>/js/StarHtmleditor.js"></script>
2.FormPanel中使用:
var addNewsForm = new Ext.form.FormPanel({
id:"addNewsForm",
frame:true,
layout:"form",
labelAlign:"right",
labelWidth:"150",
buttonAlign:"center",
fileUpload : true,
items:[{
id:"id",
name:"id",
xtype:"textfield",
fieldLabel:"编号",
hidden:true,
hideLabel:true
},{
id:"title",
name:"title",
xtype:"textfield",
fieldLabel:"新闻标题",
allowBlank:false,
minLength:5,
maxLength:50,
width:750
},{
id:"tag",
name:"tag",
xtype:"textarea",
fieldLabel:"新闻标签",
allowBlank:false,
maxLength:330,
height:70,
width:750
},{
name:"content",
xtype:"StarHtmleditor",
fieldLabel:"新闻内容",
fontFamilies: ["宋体","隶书","黑体","楷体","幼圆"],
width:750,
height:230
},{
id:"ishot",
name:"ishot",
xtype:"checkbox",
fieldLabel:"是否热点"
},{
id:"uploadNews",
name:"uploadNews",
xtype:"textfield",
inputType:"file",
fieldLabel:"上传文件",
buttonText: ''
}],
buttons:[{
text:"确定",
handler:addNews
},{
text:"取消",
handler:function(){
location.href = "newsManagement.jsp";
}
}]
});
注意:此时的xtype是StarHtmleditor。
3.上传图片的Servlet:
if ("uploadImage".equals(action)) {
String imgDir = Configuration.getConfig().getString("imgDir");//读取配置文件
Map<String, String> map = UploadFileUtil.uploadImage(imgDir, request);//此处开始上传图片
response.setContentType("text/html;charset=UTF-8");
out=response.getWriter();
if (map.get("msg") != null) {//输出错误信息
out.print("{failure:\""+map.get("msg")+"\"}");
out.close();
return;
}
String imgName = map.get("imgName");
out.print("{success:'true',fileURL:'" + imgName + "'}");
return;
}
4.上传图片的工具类:
import java.io.File;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class UploadFileUtil {
/**
* 获取ServletFileUpload
* @return
*/
public static ServletFileUpload getServletFileUpload(){
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding("UTF-8");//注意要设置编码
return upload;
}
/**
* 上传图片
* @param fileDir
* @param request
* @return
*/
public static Map<String, String> uploadImage(String fileDir, HttpServletRequest request) {
String imgName = null;
long maxSize = 5*1024*1024;
List<FileItem> fileItems;
Map<String, String> map = new HashMap<String, String>();
try {
//1.判断目录是否存在,不存在则创建目录
String[] paths;
if (fileDir.contains("/")) {
paths = fileDir.split("/");
}
else {
paths = fileDir.split("\\\\");//注意:此处“\\”是错误的,必须要“\\\\”才能分割字符串
}
String dir = paths[0];
for (int i = 1; i < paths.length; i++) {
dir = dir + File.separator + paths[i];
File file=new File(dir.toString());
if (!file.exists()) {
file.mkdir();
}
}
//2.保存图片
fileItems = getServletFileUpload().parseRequest(request);//解析request获取上传的图片名称
for (int i = 0; i < fileItems.size(); i++) {
FileItem fileItem = fileItems.get(i);
if (fileItem.getFieldName().equals("uploadFile")) {
imgName = fileItem.getName();
if (imgName == "" || imgName == null) {
map.put("msg", "请先上传图片");
return map;
}
String suffix = imgName.substring(imgName.lastIndexOf(".") + 1);
if (!("png".equalsIgnoreCase(suffix)||"jpg".equalsIgnoreCase(suffix)||"gif".equalsIgnoreCase(suffix))) {
map.put("msg", "请上传png/jpg/gif等格式的图片");
return map;
}
long size = fileItem.getSize();
if (size > maxSize) {
map.put("msg", "您上传的图片过大,请重新上传");
return map;
}
imgName = System.currentTimeMillis() + imgName.substring(imgName.lastIndexOf("."));
map.put("imgName", imgName);
fileItem.write(new File(fileDir + File.separator +imgName));
}
}
} catch (FileUploadException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return map;
}
}
5.显示图片的Servlet:
if ("showImg".equals(action)) {
String imgDir = Configuration.getConfig().getString("imgDir");
String imgName = request.getParameter("imgName");
File file=new File(imgDir + File.separator + imgName);
if(file.exists()&&!"".equals(imgDir)){
try {
DataOutputStream dos=new DataOutputStream(response.getOutputStream());
DataInputStream dis=new DataInputStream(new FileInputStream(file.getAbsolutePath()));
byte[] data=new byte[2048];
while((dis.read(data))!=-1){
dos.write(data);
dos.flush();
}
dis.close();
dos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return;
}
注意:显示图片需要通过输出流的方式实现!
图示:
源码:
富文本编辑器中内容的提交和FileItem上传文件/图片的使用方式请参考:
Extjs通过Apache的FileItem进行文件的上传下载
上传图片参考:
extjs的HTMLEditor添加上传图片功能
- 大小: 4.4 KB
- 大小: 10.2 KB
- 大小: 6.7 KB
- 大小: 5.7 KB
- 大小: 4.6 KB
- 大小: 39.9 KB
- 大小: 9.4 KB
分享到:
相关推荐
CKEditor是一款功能丰富的富文本编辑器,常用于网页中的内容编辑。本篇文章将详细介绍如何在SSH框架中整合CKEditor与ExtJS,以实现高效、美观的前端文本编辑功能。 首先,我们需要理解SSH框架的运作原理。Spring...
对于开发者来说,这个资源可能是了解如何使用EXTJS构建在线EXCEL编辑器的起点,可以通过学习和研究这些文件来掌握具体实现方法。 在开发此类应用时,开发者需要熟悉EXTJS的基本概念,如组件、模型(Model)、视图...
- **数据绑定**:使用ExtJS的数据绑定机制,你可以将编辑器的内容与模型字段绑定,实现内容的实时同步和保存。 2. **测试与兼容性**: - **服务器环境**:由于ExtJS 4采用MVC模式,本地测试可能遇到问题,所以...
ExtJS HTMLEditor是一款基于JavaScript的富文本编辑器,它提供了丰富的HTML编辑功能,常用于Web应用中的内容编辑和创建。这个主题主要关注如何在ExtJS的HTMLEditor中实现图片的上传和添加网络图片功能。 首先,理解...
HtmlEditor是ExtJs提供的一个富文本编辑器组件,提供了基本的文本编辑功能,但在实际应用中,我们需要扩展其功能以满足特定的需求。插入图片是HtmlEditor编辑器中最常用的功能之一,本文将详细介绍如何扩展ExtJs的...
总的来说,这个资源为使用ExtJS4开发富文本编辑器的开发者提供了一套完整的解决方案,特别是对于需要在编辑器中插入图片的场景。通过学习和应用这份资料,开发者不仅可以掌握如何在ExtJS4的htmleditor中实现图片上传...
EXTJS页面编辑器是一款专为EXTJS开发人员设计的强大工具,它极大地简化了EXTJS界面的构建过程,使得开发者能够快速、高效地创建出复杂的Web应用程序界面。EXTJS是一种流行的JavaScript框架,以其丰富的组件库、可...
在本文中,我们将深入探讨如何使用ExtJs框架实现图片的批量显示、上传和删除功能。ExtJs是一款强大的JavaScript库,专用于构建富客户端应用程序,它提供了丰富的组件和强大的数据管理能力,非常适合处理图像操作。 ...
在"Extjs图片上传 带过滤和缩略图"这个主题中,我们将深入探讨如何使用ExtJS实现图片上传功能,同时结合过滤和缩略图显示,以提升用户体验。 1. **图片上传组件**: 在ExtJS中,可以使用`Ext.form.FileField`或`...
通过以上分析,我们可以看出“EXTJS 强大的图片查看器 仿windows照片查看器”是一个结合了EXTJS框架、JavaScript编程、响应式设计和用户交互的综合性项目,开发者需要具备多方面的技能才能成功地定制和应用这个组件...
ExtJS是一个很不错的Ajax框架,可以用来开发带有华丽外观的富客户端应用,使得我们的b/s应用更加具有活力及生命力.ExtJS是一个用javascript编写,与后台技术无关的前端ajax框架.因此,可以把ExtJS用在.Net、Java、Php等...
1. 图片上传:在使用TextArea_HTMLEditor时,可能需要集成图片上传功能,通常通过自定义按钮实现,处理上传逻辑并在成功后更新编辑器内容。 2. 安全性:由于编辑器允许输入HTML代码,可能存在XSS攻击风险,因此在...
在IT行业中,ExtJS是一个广泛使用的JavaScript库,用于构建富客户端Web应用程序。它提供了一整套组件和工具,包括表格、窗体、菜单等,帮助开发者创建功能丰富的、交互式的用户界面。本教程将深入探讨如何在ExtJS中...
本文将深入探讨如何在ExtJS中实现进度条的显示,这是一个在数据加载、文件上传或任何需要用户等待的任务中非常实用的功能。通过理解和应用以下知识点,你可以有效地在你的ExtJS项目中集成进度条,提升用户体验。 ##...
总结来说,本文介绍的基于ExtJS的WebXML编辑器通过利用ExtJS丰富的用户界面组件和高效的JavaScript库,实现了无需客户端软件、在网页上直接编辑XML文件的功能。通过集成Ajax技术,该编辑器能够实现与服务器端的无...
KindEditor是一款广泛应用于Web开发中的开源富文本编辑器,它提供了丰富的编辑功能,使得用户可以在网页上方便地创建和编辑内容。在这个优化过程中,我们主要关注了以下几个方面: 1. **Flash批量上传图片向H5上传...
在"ExtJS带进度条的多文件上传和图片预览"这个项目中,它展示了如何利用ExtJS来实现一个高效且用户友好的文件上传功能,尤其适用于处理大量或大体积的文件。下面将详细介绍这个项目中的关键知识点。 1. **ExtJS组件...
EXTJS 3.*版本虽然较旧,但依然广泛使用,其组件和API已经足够实现图片上传功能。 首先,我们需要EXTJS中的FileField组件,它允许用户选择本地文件。在表单中添加一个FileField,并设置它的`inputType`为'file',以...
HtmlEditor(编辑器)的一个图片插件,制作过程用到了图片上传等,采用Struts1.2 ,上传组件使用的是Cos,这个插件的意义并不在于插件本身,只是希望给要用ExtJS做文件上传或想做ExtJS插件的朋友提供一种思路 ...