`

Extjs的HtmlEidtor富文本编辑器的使用和图片上传显示的实现

阅读更多

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";
		}
	}]
});
 注意:此时的xtypeStarHtmleditor


 

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
分享到:
评论

相关推荐

    SSH+ExtJs完成CKEditor富文本编辑器整合

    CKEditor是一款功能丰富的富文本编辑器,常用于网页中的内容编辑。本篇文章将详细介绍如何在SSH框架中整合CKEditor与ExtJS,以实现高效、美观的前端文本编辑功能。 首先,我们需要理解SSH框架的运作原理。Spring...

    基于EXTJS 的在线EXCEL编辑器

    对于开发者来说,这个资源可能是了解如何使用EXTJS构建在线EXCEL编辑器的起点,可以通过学习和研究这些文件来掌握具体实现方法。 在开发此类应用时,开发者需要熟悉EXTJS的基本概念,如组件、模型(Model)、视图...

    Extjs4 整合百度编辑器

    - **数据绑定**:使用ExtJS的数据绑定机制,你可以将编辑器的内容与模型字段绑定,实现内容的实时同步和保存。 2. **测试与兼容性**: - **服务器环境**:由于ExtJS 4采用MVC模式,本地测试可能遇到问题,所以...

    extjs htmleditor 图片上传和添加网络图片编辑器

    ExtJS HTMLEditor是一款基于JavaScript的富文本编辑器,它提供了丰富的HTML编辑功能,常用于Web应用中的内容编辑和创建。这个主题主要关注如何在ExtJS的HTMLEditor中实现图片的上传和添加网络图片功能。 首先,理解...

    扩展ExtJs的HtmlEditor编辑器插入图片.pdf

    HtmlEditor是ExtJs提供的一个富文本编辑器组件,提供了基本的文本编辑功能,但在实际应用中,我们需要扩展其功能以满足特定的需求。插入图片是HtmlEditor编辑器中最常用的功能之一,本文将详细介绍如何扩展ExtJs的...

    完整的Extjs4 htmleditor上传图片插件(包括实例和用法)

    总的来说,这个资源为使用ExtJS4开发富文本编辑器的开发者提供了一套完整的解决方案,特别是对于需要在编辑器中插入图片的场景。通过学习和应用这份资料,开发者不仅可以掌握如何在ExtJS4的htmleditor中实现图片上传...

    EXTJS页面编辑器

    EXTJS页面编辑器是一款专为EXTJS开发人员设计的强大工具,它极大地简化了EXTJS界面的构建过程,使得开发者能够快速、高效地创建出复杂的Web应用程序界面。EXTJS是一种流行的JavaScript框架,以其丰富的组件库、可...

    ExtJs框架系列之图片批量显示,上传,删除

    在本文中,我们将深入探讨如何使用ExtJs框架实现图片的批量显示、上传和删除功能。ExtJs是一款强大的JavaScript库,专用于构建富客户端应用程序,它提供了丰富的组件和强大的数据管理能力,非常适合处理图像操作。 ...

    Extjs图片上传 带过滤和缩略图

    在"Extjs图片上传 带过滤和缩略图"这个主题中,我们将深入探讨如何使用ExtJS实现图片上传功能,同时结合过滤和缩略图显示,以提升用户体验。 1. **图片上传组件**: 在ExtJS中,可以使用`Ext.form.FileField`或`...

    EXTJS 强大的图片查看器 仿windows照片查看器

    通过以上分析,我们可以看出“EXTJS 强大的图片查看器 仿windows照片查看器”是一个结合了EXTJS框架、JavaScript编程、响应式设计和用户交互的综合性项目,开发者需要具备多方面的技能才能成功地定制和应用这个组件...

    Extjs3.2可视化编辑器

    ExtJS是一个很不错的Ajax框架,可以用来开发带有华丽外观的富客户端应用,使得我们的b/s应用更加具有活力及生命力.ExtJS是一个用javascript编写,与后台技术无关的前端ajax框架.因此,可以把ExtJS用在.Net、Java、Php等...

    TextArea_HTMLEditor 编辑器 learning extjs 中文

    1. 图片上传:在使用TextArea_HTMLEditor时,可能需要集成图片上传功能,通常通过自定义按钮实现,处理上传逻辑并在成功后更新编辑器内容。 2. 安全性:由于编辑器允许输入HTML代码,可能存在XSS攻击风险,因此在...

    EXtjs 图片批量上传

    在IT行业中,ExtJS是一个广泛使用的JavaScript库,用于构建富客户端Web应用程序。它提供了一整套组件和工具,包括表格、窗体、菜单等,帮助开发者创建功能丰富的、交互式的用户界面。本教程将深入探讨如何在ExtJS中...

    extjs 进度条的显示

    本文将深入探讨如何在ExtJS中实现进度条的显示,这是一个在数据加载、文件上传或任何需要用户等待的任务中非常实用的功能。通过理解和应用以下知识点,你可以有效地在你的ExtJS项目中集成进度条,提升用户体验。 ##...

    基于ExtJS的WebXML编辑器设计与实现.pdf

    总结来说,本文介绍的基于ExtJS的WebXML编辑器通过利用ExtJS丰富的用户界面组件和高效的JavaScript库,实现了无需客户端软件、在网页上直接编辑XML文件的功能。通过集成Ajax技术,该编辑器能够实现与服务器端的无...

    优化kindeditor,修改flash批量上传图片方式为H5上传,添加第三方视频代码功能,添加手机尺寸预览,粘

    KindEditor是一款广泛应用于Web开发中的开源富文本编辑器,它提供了丰富的编辑功能,使得用户可以在网页上方便地创建和编辑内容。在这个优化过程中,我们主要关注了以下几个方面: 1. **Flash批量上传图片向H5上传...

    ExtJS带进度条的多文件上传和图片预览

    在"ExtJS带进度条的多文件上传和图片预览"这个项目中,它展示了如何利用ExtJS来实现一个高效且用户友好的文件上传功能,尤其适用于处理大量或大体积的文件。下面将详细介绍这个项目中的关键知识点。 1. **ExtJS组件...

    extjs图片上传

    EXTJS 3.*版本虽然较旧,但依然广泛使用,其组件和API已经足够实现图片上传功能。 首先,我们需要EXTJS中的FileField组件,它允许用户选择本地文件。在表单中添加一个FileField,并设置它的`inputType`为'file',以...

    ExtJS的编辑器HtmlEditor的一个图片插件

    HtmlEditor(编辑器)的一个图片插件,制作过程用到了图片上传等,采用Struts1.2 ,上传组件使用的是Cos,这个插件的意义并不在于插件本身,只是希望给要用ExtJS做文件上传或想做ExtJS插件的朋友提供一种思路 ...

Global site tag (gtag.js) - Google Analytics