欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于富文本框KindEditor的使用

程序员文章站 2022-05-29 23:17:46
...

1. 首先献上官网地址和资源

   js,css等资源百度云链接:https://pan.baidu.com/s/1tbSeToJQ1BYsXNPKChX7Zg 密码:xry2

2.具体前端后端代码(html没有加入其他样式)

  引入上面的js和css

<textarea id="description" name="goodConte" style="width:80%" rows="20">${goods.goodConte}</textarea>
$(function(){
    KindEditor.ready(function(K) {
        window.editor = K.create('#description',{
            items : [
                'source', '|', 'undo', 'redo', '|', 'preview', 'print', 'template', 'code', 'cut', 'copy', 'paste',
                'plainpaste', 'wordpaste', '|', 'justifyleft', 'justifycenter', 'justifyright',
                'justifyfull', 'insertorderedlist', 'insertunorderedlist', 'indent', 'outdent', 'subscript',
                'superscript', 'clearhtml', 'quickformat', 'selectall', '|', 'fullscreen', '/',
                'formatblock', 'fontname', 'fontsize', '|', 'forecolor', 'hilitecolor', 'bold',
                'italic', 'underline', 'strikethrough', 'lineheight', 'removeformat', '|', 'image', 'multiimage',
                'flash', 'media', 'insertfile', 'table', 'hr', 'emoticons', 'baidumap', 'pagebreak',
                'anchor', 'link', 'unlink', '|', 'about'
            ],
                allowImageUpload:true,//允许上传图片
                allowFileManager:true,
                allowPreviewEmoticons : true,
                uploadJson : '../WxGoods/imageUpload',//富文本框图片上传
                fileManagerJson : '../WxGoods/imageManage',//富文本框图片查看
                urlType : "domain",
                afterBlur: function(){this.sync();}//解决表单通过ajax请求提交造成的提交不到后台的问题
        });
    }); 
});
//富文本框图片上传
@ResponseBody
@RequestMapping(value = "/imageUpload",method = RequestMethod.POST)
public Map<String, Object> imageUpload(HttpServletRequest request,HttpServletResponse response,RedirectAttributes ra) throws Exception {
	ServletContext application = request.getSession().getServletContext();
    String Path = application.getRealPath("/");
    File uploadDir1 = new File(Path);
        
        String savePath  = uploadDir1.getParent()+ "/file/KindEditor/";
        
        //展示到富文本框上的链接
        String saveUrl = "/file/KindEditor/";
         
         // 定义允许上传的文件扩展名
         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.setContentType("text/html; charset=UTF-8");
 
         if (!ServletFileUpload.isMultipartContent(request)) {
             return getError("请选择文件。");
         }
         // 检查目录
         File uploadDir = new File(savePath);
         if (!uploadDir.isDirectory()) {
        	 uploadDir.mkdirs();
             //return getError("上传目录不存在。");
         }
         // 检查目录写权限
         if (!uploadDir.canWrite()) {
             return getError("上传目录没有写权限。");
         }
 
         String dirName = request.getParameter("dir");
         if (dirName == null) {
             dirName = "image";
         }
         if (!extMap.containsKey(dirName)) {
             return getError("目录名不正确。");
         }
         // 创建文件夹
         savePath += dirName + "/";//D:\Tomcat 7.1\webapps\oms\images/image/
         saveUrl += dirName + "/";///oms/images/image/
         File saveDirFile = new File(savePath);
         if (!saveDirFile.exists()) {
             saveDirFile.mkdirs();
         }
         SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
         String ymd = sdf.format(new Date());
         savePath += ymd + "/";//D:\Tomcat 7.1\webapps\oms\images/image/20180606/
         saveUrl += ymd + "/";///oms/images/image/20180606/
         File dirFile = new File(savePath);
         if (!dirFile.exists()) {
             dirFile.mkdirs();
         }
 
         FileItemFactory factory = new DiskFileItemFactory();
         ServletFileUpload upload = new ServletFileUpload(factory);
         upload.setHeaderEncoding("UTF-8");
 
         MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
         Iterator item = multipartRequest.getFileNames();
         while (item.hasNext()) {
 
             String fileName = (String) item.next();//imgFile
             MultipartFile file = multipartRequest.getFile(fileName);
             // 检查文件大小
             if (file.getSize() > maxSize) {
                 return getError("上传文件大小超过限制。");
             }
             // 检查扩展名
             String fileExt = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".") + 1).toLowerCase();//jpg
             if (!Arrays. asList(extMap.get(dirName).split(",")).contains(fileExt)) {
                 return getError("上传文件扩展名是不允许的扩展名。\n只允许"
                         + extMap.get(dirName) + "格式。");
             }
             SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
             String newFileName = df.format(new Date()) + "_" + new Random().nextInt(1000) + "." + fileExt;//20180606092738_304.jpg
             try {
             File uploadedFile = new File(savePath, newFileName);//D:\Tomcat 7.1\webapps\oms\images\image\20180606\20180606092738_304.jpg
             ByteStreams.copy(file.getInputStream(), new FileOutputStream(uploadedFile));
             } catch (Exception e) {
                 return getError("上传文件失败。");
             }
             Map<String, Object> msg = new HashMap<String, Object>();
             
             msg.put("error", 0);
             msg.put("url", saveUrl + newFileName);
             return msg;
           }
         return null;	
	}
	
	//富文本框图片查看
	@RequestMapping(value = "/imageManage")
	public void imageManage(HttpServletRequest request,HttpServletResponse response,RedirectAttributes ra) throws Exception {
			
		ServletContext application = request.getSession().getServletContext();
	    ServletOutputStream out = response.getOutputStream();
	         
	    String Path = application.getRealPath("/");
	    File uploadDir1 = new File(Path);
	    String rootPath  = uploadDir1.getParent()+ "/file/KindEditor/";
	    
	    //展示到富文本框上的链接
	    String rootUrl = "/file/KindEditor/";
	   
        // 图片扩展名
        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>();
         JSONObject msg = new JSONObject();
         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(msg.toJSONString());
     }
 
     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"));
             }
         }
     }
 
     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;
                 }
             }
         }
     }
 
     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"));
             }
         }
     }
     

3.讲解

 富文本编辑器是一种可内嵌于浏览器,所见即所得的文本编辑器。这里用的富文本编辑器是KindEditor。我用在商城里的商品信息管理。

 上面的代码几乎就是全部内容了,在我的百度云文件里面没有上面的java代码,他是直接在jsp上写的java代码,当初本来直接引用他里面的代码,不另外写代码的,但是我发现linux里不是很兼容jsp里的java代码,本地运行的很正常,但是一放在linux山就出现了错误,看日志就表示哪个文件里的错误,所以没办法就将其转为java文件的的上面的代码,然后将里面的路径改改就可以了。

我的java代码,上面是上传本地图片或者文件的方法,是通用的;下面是查看之前上传的图片的的方法,也就是查看图片服务器里的文件夹。 富文本编辑器里的所有功能都可以用,都可以点,看我的js里面的items,就是动态的各个功能,可以有选择的添加,我这里是全部添加了,里面有上传图片,多上传图片,上传音视频,查看动态地图(这个是没有定位功能的,但是可以动),一些表情,一些颜色样式等等都是以html格式存储的,所以功能很强大。

写到这里就要结束啦。

展示下效果图:

关于富文本框KindEditor的使用

关于富文本框KindEditor的使用

关于富文本框KindEditor的使用

关于富文本框KindEditor的使用

看下面点击红色的地方,就会展示html代码,这些最后保存是存入数据库的

关于富文本框KindEditor的使用

相关标签: KindEditor