SpringMVC+kindeditor在线HTML编辑器

去官网下载,解压,都有实例代码,直接使用!~

前台:

var editor;
				KindEditor.ready(function(K) {
					editor = K.create(‘textarea[name="Introduce"]‘, {
							uploadJson : ‘file_upload‘,//上传
			                fileManagerJson : ‘file_manager‘,//文件管理
			                allowFileManager : true,
			                afterBlur: function () { this.sync(); },//数据同步
					});
					K(‘#image1‘).click(function() {
						editor.loadPlugin(‘image‘, function() {
							editor.plugin.imageDialog({
								imageUrl : K(‘#ProductImage‘).val(),
								clickFn : function(url, title, width, height, border, align) {
									K(‘#ProductImage‘).val(url);
									editor.hideDialog();
								}
							});
						});
					});

jsp页面:

<td>商品图片:</td>
<td><input type="text" id="ProductImage" name="ProductImage"  class="easyui-validatebox" value="${tp.productImage}"  required=true /> <input type="button" id="image1" value="选择图片" />(网络图片 + 本地上传)</td>
</tr> 
<tr>
    <td>商品描述</td>
    	<td><textarea  name="Introduce" style="width:700px;height:200px;visibility:hidden;"  >${tp.introduce}</textarea></td>

后台:

private static final ObjectMapper objectMapper = new ObjectMapper();
private PrintWriter writer = null;

/**
	 * to商品添加、修改上传
	 * @return
	 * @throws Exception 
	 */
	@RequestMapping(value="/file_upload",method=RequestMethod.POST)
	public void file_upload(HttpServletRequest request, HttpServletResponse response) throws Exception{

		  ServletContext application = request.getSession().getServletContext();
	        String savePath = application.getRealPath("/") + "upload/";
	        // 文件保存目录URL
	        String saveUrl = request.getContextPath() + "/upload/";
	 
	        // 定义允许上传的文件扩展名
	        HashMap<String, String> extMap = new HashMap<String, String>();
	        extMap.put("image", "gif,jpg,jpeg,png,bmp");
	        extMap.put("flash", "swf,flv");
	        extMap.put("media", "swf,flv,mp3,wav,wma,wmv,mid,avi,mpg,asf,rm,rmvb");
	        extMap.put("file", "doc,docx,xls,xlsx,ppt,htm,html,txt,zip,rar,gz,bz2");
	 
	        // 最大文件大小
	        long maxSize = 1000000;
	 
	        response.reset();
	        response.setCharacterEncoding("UTF-8");
	        response.setContentType("text/html");
	        writer = response.getWriter();
	        if (!ServletFileUpload.isMultipartContent(request)) {
	            writer.println(objectMapper.writeValueAsString(getError("请选择文件。")));
	            return;
	 
	        }
	        // 检查目录
	        File uploadDir = new File(savePath);
	        if (!uploadDir.isDirectory()) {
	            writer.println(objectMapper.writeValueAsString(getError("上传目录不存在。")));
	            return;
	        }
	        // 检查目录写权限
	        if (!uploadDir.canWrite()) {
	            writer.println(objectMapper.writeValueAsString(getError("上传目录没有写权限。")));
	            return;
	        }
	 
	        String dirName = request.getParameter("dir");
	        if (dirName == null) {
	            dirName = "image";
	        }
	        if (!extMap.containsKey(dirName)) {
	            writer.println(objectMapper.writeValueAsString(getError("目录名不正确。")));
	            return;
	        }
	        // 创建文件夹
	        savePath += dirName + "/";
	        saveUrl += dirName + "/";
	        File saveDirFile = new File(savePath);
	        if (!saveDirFile.exists()) {
	            saveDirFile.mkdirs();
	        }
	        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
	        String ymd = sdf.format(new Date());
	        savePath += ymd + "/";
	        saveUrl += ymd + "/";
	        File dirFile = new File(savePath);
	        if (!dirFile.exists()) {
	            dirFile.mkdirs();
	        }
	 
	        FileItemFactory factory = new DiskFileItemFactory();
	        ServletFileUpload upload = new ServletFileUpload(factory);
	        upload.setHeaderEncoding("UTF-8");
	        List items = upload.parseRequest(request);
	        Iterator itr = items.iterator();
	        while (itr.hasNext()) {
	            FileItem item = (FileItem) itr.next();
	            String fileName = item.getName();
	            if (!item.isFormField()) {
	                // 检查文件大小
	                if (item.getSize() > maxSize) {
	                    writer.println(objectMapper.writeValueAsString(getError("上传文件大小超过限制。")));
	                    return;
	                }
	                // 检查扩展名
	                String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();
	                if (!Arrays.<String>asList(extMap.get(dirName).split(",")).contains(fileExt)) {
	                    writer.println(objectMapper.writeValueAsString(getError("上传文件扩展名是不允许的扩展名。\n只允许"
	                            + extMap.get(dirName) + "格式。")));
	                    return;
	                }
	 
	                SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
	                String newFileName =
	                        df.format(new Date()) + "_" + new Random().nextInt(1000) + "." + fileExt;
	                try {
	                    File uploadedFile = new File(savePath, newFileName);
	                    item.write(uploadedFile);
	                } catch (Exception e) {
	                    writer.println(objectMapper.writeValueAsString(getError("上传文件失败。")));
	                }
	 
	                Map<String, Object> msg = new HashMap<String, Object>();
	                msg.put("error", 0);
	                msg.put("url", saveUrl + newFileName);
	                writer.println(objectMapper.writeValueAsString(msg));
	               
	                return;
	            }
	        }
	        return;
	}

	@SuppressWarnings("unchecked")
	@RequestMapping(value="/file_manager")
	public void file_manager(HttpServletRequest request, HttpServletResponse response) throws Exception{

		 ServletContext application = request.getSession().getServletContext();
	        ServletOutputStream out = response.getOutputStream();
	        // 根目录路径,可以指定绝对路径,比如 /var/www/upload/
	        String rootPath = application.getRealPath("/") + "upload/";
	        // 根目录URL,可以指定绝对路径,比如 http://www.yoursite.com/upload/
	        String rootUrl = request.getContextPath() + "/upload/";
	        // 图片扩展名
	        String[] fileTypes = new String[] {"gif", "jpg", "jpeg", "png", "bmp"};
	 
	        String dirName = request.getParameter("dir");
	        if (dirName != null) {
	            if (!Arrays.<String>asList(new String[] {"image", "flash", "media", "file"}).contains(
	                    dirName)) {
	                out.println("Invalid Directory name.");
	                return;
	            }
	            rootPath += dirName + "/";
	            rootUrl += dirName + "/";
	            File saveDirFile = new File(rootPath);
	            if (!saveDirFile.exists()) {
	                saveDirFile.mkdirs();
	            }
	        }
	        // 根据path参数,设置各路径和URL
	        String path = request.getParameter("path") != null ? request.getParameter("path") : "";
	        String currentPath = rootPath + path;
	        String currentUrl = rootUrl + path;
	        String currentDirPath = path;
	        String moveupDirPath = "";
	        if (!"".equals(path)) {
	            String str = currentDirPath.substring(0, currentDirPath.length() - 1);
	            moveupDirPath =
	                    str.lastIndexOf("/") >= 0 ? str.substring(0, str.lastIndexOf("/") + 1) : "";
	        }
	 
	        // 排序形式,name or size or type
	        String order =
	                request.getParameter("order") != null ? request.getParameter("order").toLowerCase()
	                        : "name";
	 
	        // 不允许使用..移动到上一级目录
	        if (path.indexOf("..") >= 0) {
	            out.println("Access is not allowed.");
	            return;
	        }
	        // 最后一个字符不是/
	        if (!"".equals(path) && !path.endsWith("/")) {
	            out.println("Parameter is not valid.");
	            return;
	        }
	        // 目录不存在或不是目录
	        File currentPathFile = new File(currentPath);
	        if (!currentPathFile.isDirectory()) {
	            out.println("Directory does not exist.");
	            return;
	        }
	        // 遍历目录取的文件信息
	        List<Hashtable> fileList = new ArrayList<Hashtable>();
	        if (currentPathFile.listFiles() != null) {
	            for (File file : currentPathFile.listFiles()) {
	                Hashtable<String, Object> hash = new Hashtable<String, Object>();
	                String fileName = file.getName();
	                if (file.isDirectory()) {
	                    hash.put("is_dir", true);
	                    hash.put("has_file", (file.listFiles() != null));
	                    hash.put("filesize", 0L);
	                    hash.put("is_photo", false);
	                    hash.put("filetype", "");
	                } else if (file.isFile()) {
	                    String fileExt =
	                            fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();
	                    hash.put("is_dir", false);
	                    hash.put("has_file", false);
	                    hash.put("filesize", file.length());
	                    hash.put("is_photo", Arrays.<String>asList(fileTypes).contains(fileExt));
	                    hash.put("filetype", fileExt);
	                }
	                hash.put("filename", fileName);
	                hash.put("datetime",
	                        new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(file.lastModified()));
	                fileList.add(hash);
	            }
	        }
	  
	        if ("size".equals(order)) {
	            Collections.sort(fileList, new SizeComparator());
	        } else if ("type".equals(order)) {
	        
	            Collections.sort(fileList, new TypeComparator());
	        } else {
	            Collections.sort(fileList, new NameComparator());
	        
	        }
	        Map<String, Object> msg = new HashMap<String, Object>();
	        msg.put("moveup_dir_path", moveupDirPath);
	        msg.put("current_dir_path", currentDirPath);
	        msg.put("current_url", currentUrl);
	        msg.put("total_count", fileList.size());
	        msg.put("file_list", fileList);
	        response.setContentType("application/json; charset=UTF-8");
	        String msgStr = objectMapper.writeValueAsString(msg);
	        out.println(msgStr);
	}

	 private Map<String, Object> getError(String message) {
	        Map<String, Object> msg = new HashMap<String, Object>();
	        msg.put("error", 1);
	        msg.put("message", message);
	        return msg;
	    }
	 
	 @SuppressWarnings("rawtypes")
	    class NameComparator implements Comparator {
	        public int compare(Object a, Object b) {
	            Hashtable hashA = (Hashtable) a;
	            Hashtable hashB = (Hashtable) b;
	            if (((Boolean) hashA.get("is_dir")) && !((Boolean) hashB.get("is_dir"))) {
	                return -1;
	            } else if (!((Boolean) hashA.get("is_dir")) && ((Boolean) hashB.get("is_dir"))) {
	                return 1;
	            } else {
	                return ((String) hashA.get("filename")).compareTo((String) hashB.get("filename"));
	            }
	        }
	    }
	 
	    @SuppressWarnings("rawtypes")
	    class SizeComparator implements Comparator {
	        public int compare(Object a, Object b) {
	            Hashtable hashA = (Hashtable) a;
	            Hashtable hashB = (Hashtable) b;
	            if (((Boolean) hashA.get("is_dir")) && !((Boolean) hashB.get("is_dir"))) {
	                return -1;
	            } else if (!((Boolean) hashA.get("is_dir")) && ((Boolean) hashB.get("is_dir"))) {
	                return 1;
	            } else {
	                if (((Long) hashA.get("filesize")) > ((Long) hashB.get("filesize"))) {
	                    return 1;
	                } else if (((Long) hashA.get("filesize")) < ((Long) hashB.get("filesize"))) {
	                    return -1;
	                } else {
	                    return 0;
	                }
	            }
	        }
	    }
	 
	    @SuppressWarnings("rawtypes")
	    class TypeComparator implements Comparator {
	        public int compare(Object a, Object b) {
	            Hashtable hashA = (Hashtable) a;
	            Hashtable hashB = (Hashtable) b;
	            if (((Boolean) hashA.get("is_dir")) && !((Boolean) hashB.get("is_dir"))) {
	                return -1;
	            } else if (!((Boolean) hashA.get("is_dir")) && ((Boolean) hashB.get("is_dir"))) {
	                return 1;
	            } else {
	                return ((String) hashA.get("filetype")).compareTo((String) hashB.get("filetype"));
	            }
	        }
	    }
时间: 2024-10-27 19:16:12

SpringMVC+kindeditor在线HTML编辑器的相关文章

kindeditor在线文本编辑器过滤HTML的方法

在使用kindeditor文本编辑器时遇到的问题,客户直接从Excel里粘贴文本内容到文本编辑器中(能不能再懒一些),然后不调整粘贴内容直接就保存(你敢不敢再懒一些)!对于这种很无语的行径,我只能对他大吼一声,我做一个标签过滤吧,这样你粘贴就不会出现问题了(怂?谁惹得起客户). 过滤方法也简单: KindEditor.ready(function (K) { editor = K.create('textarea[name="content"]', { filterMode: true

将kindeditor在线编辑器制作成smarty插件

在web开发中,在线编辑器是经常要用到的功能模块,虽说配置在线编辑器没有多大难度,但是每一次编写重复的代码,总是让人感觉不爽. 本篇,就来讲解一下,如何将kindeditor制作成smarty的一个自定义函数. 为什么要制作成自定义函数呢?当然是为了避免写很多重复的代码. {html_kindeditor name="kindcontent"} 假如在模板中调用一个smarty标签,就能生成一个文本编辑器(如上),那开发起来会不会感觉很过瘾呢? 好了,说下流程(本文以集成了smarty

在线文本编辑器cheditor应用实例

CKEditor 即 FCKEDITOR . FCKeditor是目前最优秀的可见即可得网页编辑器之一,它采用JavaScript编写.具备功能强大.配置容易.跨浏览器.支持多种编程语言.开源等特点.它非常流行,互联网上很容易找到相关技术文档,国内许多WEB项目和大型网站均采用了FCKeditor. FCKeditor是一个专门使用在网页上属于开放源代码的所见即所得文字编辑器.它志于轻量化,不需要太复杂的安装步骤即可使用.它可和PHP.JavaScript.ASP.ASP.NET.ColdFus

好用的在线Markdown编辑器

Markdown 是一个 Web 上使用的文本到HTML的转换工具,可以通过简单.易读易写的文本格式生成结构化的HTML文档. Markdown具有很多优点: 1.写作中添加简单符号即完成排版,所见即所得.让你专注于文字而不是排版. 2.格式转换方便,Markdown 的文本你可以轻松转换为html.pdf等. 3.可以保存称纯文本 支持Markdown的编辑器太多,功能也不完全一致,有的是用来进行基本的写作,有的是用来写代码的,有的甚至只是博客平台配套的编辑器. 本文介绍一款由码工具网开发的在

小喵的在线共享编辑器

小喵的唠叨话:写这篇博客的初衷是因为看到了室友电脑面试的时候,面试官要求在线写代码.然后就想到,如果两个人能够在同一个页面进行编辑工作,不就能更方便的调试代码了吗?(PS.懂linux的screen或tmux的可以绕道了.)代码十分简单,在一个月前就写完了,只是一直没有时间写博客说明一下. 原博客地址:http://www.miaoerduo.com/nodejs/小喵的在线共享编辑器.html 心急的同学可以在 http://editor.miaoerduo.com/?doc=demo 先预览

简要揭秘在线代码编辑器

前言 好像园里没啥帖子介绍在线代码编辑器,网上也多少相关资料,我做在线代码编辑器http://www.wcodei.com/的时候走了一堆的弯路,现在分享一下经验吧,我记性很差,就只能想到哪儿写到哪儿了,希望大家别介意. 一.所见即所得编辑器与代码编辑器的技术对比 两者看上去貌似很相似,都不是传统的editarea,都需要编辑器中显示的内容能够支持带颜色. 所见即所得编辑器的技术核心就是contenteditable="true"属性,只要在一个html容器中使用该属性,则该html容

多语言在线代码编辑器,可运行程序

在线代码编辑器,网址:http://www.mcqyy.com/RunCode/c/ 可支持的语言有: php5.3.php5.4.php5.6.php7.python2.7.python3.C#.java.shell.c语言.c++.go.lua.perl.ruby.nodejs.Objective-C.erlang.rust.R语言.scala.haskell.D语言 如下图: 也可以在首页上找到链接,首先打开首页http://www.mcqyy.com/,然后在页面的最下面的“实用工具”中

20个最强的基于浏览器的在线代码编辑器

20个最强的基于浏览器的在线代码编辑器,你听过或者用过吗? 1. Compilr Compilr是一个在线编译器和在线IDE.可以用它来开发PHP, C, C++, Ruby.在浏览器中编译Java, C# 和 VB.net等. 马上使用 2. Dabblet 跨浏览器兼容,对前端攻城师们来说是一个不得不处理的问题.为了在浏览器间呈现统一的显示效果,攻城师们不仅要为每个游览器添加CSS前缀,甚至还需要用到一些特殊的CSS Hack技巧.于是,jsFiddle.JSBin等前端代码的在线测试工具应

javascript 在线文本编辑器

javascript 在线文本编辑器实现代码.效果如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m