Ueditor编辑器实战 HTML / vue+v-model

Ueditor 编辑器实战 HTML / vue+v-model

简介

富文本编辑器,Rich Text Editor, 简称 RTE, 是一种可内嵌于浏览器,所见即所得的文本编辑器。市面上流行的编辑器有很多,大致如下:

名称优势不足
wangEditor轻量简洁,最重要的是开源且中文文档齐全。设计的UI漂亮没有强大的后台支持
kindeditor文档齐全 中文文档便于阅读理解 界面类似百度存在图片上传问题,如果上传历史过多,会全部加载,导致浏览器卡,反应慢
bootstrap-wysiwyg外观简洁大方,使用方便,支持网站充分利用Bootstrap、Font Awesome等工具库的优秀特性没有表情包 , 没有开发文档不便于阅读使用
Jquery-notebook简单,干净,优雅.用鼠标选中文字可看到效果由于bootstrap兼容问题 需要运行在现代浏览器上 , 没有开发文档不便于阅读
summernote界面简介,舒服,强大的API文档,开发方便,组件内元素易于控制(重要)移动或WEB端回显完美支持功能单一
ueditor插件多,基本满足各种需求重量级插件(个人观点哈),加载过慢,界面陈旧,官方早期插件已停止迭代优化,问题较多,组件内元素不易控制

本章节就 ueditor 进行开发阐述,至于开发过程中遇到的一些问题,后续我会在博客中一一向大家阐述,同时欢迎留言质问。

功能介绍

Ueditor 有着丰富且强大的功能,如图所示
在这里插入图片描述
我们分为两大类:1、基本功能 2、增值功能(在下自定义)
基本功能:加粗、字体、字号、下划线、表格…一些不需要后台支持的功能;
增值功能:所有均需要后端代码支持。
例如:图片视频文件上传插件一般都有配置,富文本也不例外,配置一定是针对功能的,既然功能有区别,配置也有,ueditor的配置文件有两种,一种是基本配置,有个专属的配置js文件供大家使用,并且里面有详细的使用说明;

HTML 开发

  1. 引入js/css 文件
    在这里插入图片描述
    ueditor.config.js :配置文件 ueditor基本配置都存放于此。详细介绍请看官方文档介绍,此处不一一列举。
    ueditor.all.js: 核心源码
    zh-cn.js: 中文包

  2. 初始化插件

    在这里插入图片描述

<script type="text/javascript" charset="utf-8" src="${base}/lib/ueditor/ueditor.config.js"></script>
<script type="text/javascript" charset="utf-8" src="${base}/lib/ueditor/ueditor.all.js"> </script>
<script type="text/javascript" charset="utf-8" src="${base}/lib/ueditor/lang/zh-cn/zh-cn.js"></script>
<div>
    <script id="container" type="text/plain" style="width:100%;height:500px;"></script>
</div>

<script type="text/javascript">

    var ucontent = ${content};

    var ue = UE.getEditor('container',{initialFrameHeight:400,scaleEnabled:true});
        UE.Editor.prototype._bkGetActionUrl = UE.Editor.prototype.getActionUrl;
        UE.Editor.prototype.getActionUrl = function(action) {
            if (action == 'uploadimage' || action == 'uploadscrawl' || action == 'uploadvideo' || action == 'uploadfile') {
                return '${filebase}/editor/upload'; //在这里返回我们实际的上传图片地址
            } else {
                return this._bkGetActionUrl.call(this, action);
            }
    };

    ue.ready(function() {
        ue.setContent(ucontent);
    });
 </script>
  1. 后端接口支持
    上传文件接口:

后端提供文件上传接口,这里的文件上传包括图片视频音频等,都调用同一个接口,需要注意的是接口返回的数据严格按照此种json格式来,否则编辑时识别不了将不会回显图片,至于上传功能,您可以自由发挥,但必须确保返回的路径可以访问哦!
在这里插入图片描述

 /**
     * 上传文件 到fastdfs文件服务器
     *
     * @param file 需要上传的文件
     * @return 保存后的文件地址,文件组名
     * @author Jung
     * @since 2018年06月16日12:17:42
     */
    @PostMapping("upload")
    public String  upload(@RequestParam(required = false) MultipartFile file) {
        //fastdfs 文件服务器地址
        if (file == null || file.isEmpty()) {
            return "error";
        }
        try {
            FastdfsFileDTO fileDTO = fileService.fileUpload(file, false);
            String config = "{\"state\": \"SUCCESS\"," +
                    "\"url\": \"" + fileDTO.getFileUrl() + "\"," +
                    "\"title\": \"" + fileDTO.getFileName() + "\"," +
                    "\"original\": \"" + fileDTO.getFileName() + "\"}";
            return config;
        } catch (UnityRuntimeException e) {
            return "error";
        }
    }

获取功能项配置接口
编辑器此项有没有增值功能,全部依赖此接口返回,若你不想配置某项功能可以在接口中删掉对应的属性,前端则无此功能,这些配置里包含着上传路径,上传action名称,表单名称,限制文件大小等等,皆有详细注释。此接口地址在前段需要配置在config.js 中,如图所示

在这里插入图片描述
在这里插入图片描述

@RequestMapping(value = "/config")
    @ResponseBody
    public String config(HttpServletRequest request, HttpServletResponse response) {

        String config = "{\n" +
                "    /* 上传图片配置项 */\n" +
                "    \"imageActionName\": \"uploadimage\", /* 执行上传图片的action名称 */\n" +
                "    \"imageFieldName\": \"file\", /* 提交的图片表单名称 */\n" +
                "    \"imageMaxSize\": 2048000, /* 上传大小限制,单位B */\n" +
                "    \"imageAllowFiles\": [\".png\", \".jpg\", \".jpeg\", \".gif\", \".bmp\"], /* 上传图片格式显示 */\n" +
                "    \"imageCompressEnable\": true, /* 是否压缩图片,默认是true */\n" +
                "    \"imageCompressBorder\": 1600, /* 图片压缩最长边限制 */\n" +
                "    \"imageInsertAlign\": \"none\", /* 插入的图片浮动方式 */\n" +
                "    \"imageUrlPrefix\": \"\", /* 图片访问路径前缀 */\n" +
                "    \"imagePathFormat\": \"/ueditor/jsp/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}\", /* 上传保存路径,可以自定义保存路径和文件名格式 */\n" +
                "                                /* {filename} 会替换成原文件名,配置这项需要注意中文乱码问题 */\n" +
                "                                /* {rand:6} 会替换成随机数,后面的数字是随机数的位数 */\n" +
                "                                /* {time} 会替换成时间戳 */\n" +
                "                                /* {yyyy} 会替换成四位年份 */\n" +
                "                                /* {yy} 会替换成两位年份 */\n" +
                "                                /* {mm} 会替换成两位月份 */\n" +
                "                                /* {dd} 会替换成两位日期 */\n" +
                "                                /* {hh} 会替换成两位小时 */\n" +
                "                                /* {ii} 会替换成两位分钟 */\n" +
                "                                /* {ss} 会替换成两位秒 */\n" +
                "                                /* 非法字符 \\ : * ? \" < > | */\n" +
                "                                /* 具请体看线上文档: fex.baidu.com/ueditor/#use-format_upload_filename */\n" +
                "\n" +
                "    /* 涂鸦图片上传配置项 */\n" +
                "    \"scrawlActionName\": \"uploadscrawl\", /* 执行上传涂鸦的action名称 */\n" +
                "    \"scrawlFieldName\": \"file\", /* 提交的图片表单名称 */\n" +
                "    \"scrawlPathFormat\": \"/ueditor/jsp/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}\", /* 上传保存路径,可以自定义保存路径和文件名格式 */\n" +
                "    \"scrawlMaxSize\": 2048000, /* 上传大小限制,单位B */\n" +
                "    \"scrawlUrlPrefix\": \"\", /* 图片访问路径前缀 */\n" +
                "    \"scrawlInsertAlign\": \"none\",\n" +
                "\n" +
                "    /* 截图工具上传 */\n" +
                "    \"snapscreenActionName\": \"uploadimage\", /* 执行上传截图的action名称 */\n" +
                "    \"snapscreenPathFormat\": \"/ueditor/jsp/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}\", /* 上传保存路径,可以自定义保存路径和文件名格式 */\n" +
                "    \"snapscreenUrlPrefix\": \"\", /* 图片访问路径前缀 */\n" +
                "    \"snapscreenInsertAlign\": \"none\", /* 插入的图片浮动方式 */\n" +
                "\n" +
                "    /* 抓取远程图片配置 */\n" +
                "    \"catcherLocalDomain\": [\"127.0.0.1\", \"localhost\", \"img.baidu.com\"],\n" +
                "    \"catcherActionName\": \"catchimage\", /* 执行抓取远程图片的action名称 */\n" +
                "    \"catcherFieldName\": \"source\", /* 提交的图片列表表单名称 */\n" +
                "    \"catcherPathFormat\": \"/ueditor/jsp/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}\", /* 上传保存路径,可以自定义保存路径和文件名格式 */\n" +
                "    \"catcherUrlPrefix\": \"\", /* 图片访问路径前缀 */\n" +
                "    \"catcherMaxSize\": 2048000, /* 上传大小限制,单位B */\n" +
                "    \"catcherAllowFiles\": [\".png\", \".jpg\", \".jpeg\", \".gif\", \".bmp\"], /* 抓取图片格式显示 */\n" +
                "\n" +
                "    /* 上传视频配置 */\n" +
                "    \"videoActionName\": \"uploadvideo\", /* 执行上传视频的action名称 */\n" +
                "    \"videoFieldName\": \"file\", /* 提交的视频表单名称 */\n" +
                "    \"videoPathFormat\": \"/ueditor/jsp/upload/video/{yyyy}{mm}{dd}/{time}{rand:6}\", /* 上传保存路径,可以自定义保存路径和文件名格式 */\n" +
                "    \"videoUrlPrefix\": \"\", /* 视频访问路径前缀 */\n" +
                "    \"videoMaxSize\": 52428800, /* 上传大小限制,单位B,50MB */\n" +
                "    \"videoAllowFiles\": [\n" +
                "        \".flv\", \".swf\", \".mkv\", \".avi\", \".rm\", \".rmvb\", \".mpeg\", \".mpg\",\n" +
                "        \".ogg\", \".ogv\", \".mov\", \".wmv\", \".mp4\", \".webm\", \".mp3\", \".wav\", \".mid\"], /* 上传视频格式显示 */\n" +
                "\n" +
                "    /* 上传文件配置 */\n" +
                "    \"fileActionName\": \"uploadfile\", /* controller里,执行上传视频的action名称 */\n" +
                "    \"fileFieldName\": \"file\", /* 提交的文件表单名称 */\n" +
                "    \"filePathFormat\": \"/ueditor/jsp/upload/file/{yyyy}{mm}{dd}/{time}{rand:6}\", /* 上传保存路径,可以自定义保存路径和文件名格式 */\n" +
                "    \"fileUrlPrefix\": \"\", /* 文件访问路径前缀 */\n" +
                "    \"fileMaxSize\": 52428800, /* 上传大小限制,单位B,默认50MB */\n" +
                "    \"fileAllowFiles\": [\n" +
                "        \".png\", \".jpg\", \".jpeg\", \".gif\", \".bmp\",\n" +
                "        \".flv\", \".swf\", \".mkv\", \".avi\", \".rm\", \".rmvb\", \".mpeg\", \".mpg\",\n" +
                "        \".ogg\", \".ogv\", \".mov\", \".wmv\", \".mp4\", \".webm\", \".mp3\", \".wav\", \".mid\",\n" +
                "        \".rar\", \".zip\", \".tar\", \".gz\", \".7z\", \".bz2\", \".cab\", \".iso\",\n" +
                "        \".doc\", \".docx\", \".xls\", \".xlsx\", \".ppt\", \".pptx\", \".pdf\", \".txt\", \".md\", \".xml\"\n" +
                "    ], /* 上传文件格式显示 */\n" +
                "\n" +
                "    /* 列出指定目录下的图片 */\n" +
                "    \"imageManagerActionName\": \"listimage\", /* 执行图片管理的action名称 */\n" +
                "    \"imageManagerListPath\": \"/ueditor/jsp/upload/image/\", /* 指定要列出图片的目录 */\n" +
                "    \"imageManagerListSize\": 20, /* 每次列出文件数量 */\n" +
                "    \"imageManagerUrlPrefix\": \"\", /* 图片访问路径前缀 */\n" +
                "    \"imageManagerInsertAlign\": \"none\", /* 插入的图片浮动方式 */\n" +
                "    \"imageManagerAllowFiles\": [\".png\", \".jpg\", \".jpeg\", \".gif\", \".bmp\"], /* 列出的文件类型 */\n" +
                "\n" +
                "    /* 列出指定目录下的文件 */\n" +
                "    \"fileManagerActionName\": \"listfile\", /* 执行文件管理的action名称 */\n" +
                "    \"fileManagerListPath\": \"/ueditor/jsp/upload/file/\", /* 指定要列出文件的目录 */\n" +
                "    \"fileManagerUrlPrefix\": \"\", /* 文件访问路径前缀 */\n" +
                "    \"fileManagerListSize\": 20, /* 每次列出文件数量 */\n" +
                "    \"fileManagerAllowFiles\": [\n" +
                "        \".png\", \".jpg\", \".jpeg\", \".gif\", \".bmp\",\n" +
                "        \".flv\", \".swf\", \".mkv\", \".avi\", \".rm\", \".rmvb\", \".mpeg\", \".mpg\",\n" +
                "        \".ogg\", \".ogv\", \".mov\", \".wmv\", \".mp4\", \".webm\", \".mp3\", \".wav\", \".mid\",\n" +
                "        \".rar\", \".zip\", \".tar\", \".gz\", \".7z\", \".bz2\", \".cab\", \".iso\",\n" +
                "        \".doc\", \".docx\", \".xls\", \".xlsx\", \".ppt\", \".pptx\", \".pdf\", \".txt\", \".md\", \".xml\"\n" +
                "    ] /* 列出的文件类型 */\n" +
                "\n" +
                "}";
        return config;

    }

至此纯HTML 方式集成编辑器就完成了。

vue + ueditor + v-model 开发

1、引入VueUeditorWrap组件
在这里插入图片描述
2、绑定数据
在这里插入图片描述
3、配置组件

在这里插入图片描述

其中 serverUrl 是指 从后端获取 【功能项配置】和【上传图片视频文件】的地址,与纯HTML方式不同的是后端接口,纯HTML 需要后端支持两个接口,则vue集成后 会将两个接口合二为一,将文件上传接口和获取功能项配置接口合并,ueditor会通过 传不同的表单参数来上传文件或者获取数据,如图所示:

在这里插入图片描述

   @RequestMapping("config")
    public void ueditorConfig(HttpServletRequest request, HttpServletResponse response, MultipartFile file) {
        try {
            String exec = "";
            request.setCharacterEncoding("utf-8");
            response.setContentType("text/plain");
            response.setHeader("Pragma", "No-cache");
            response.setHeader("Cache-Control", "no-cache");
            response.setDateHeader("Expires", 0);
            String actionType = request.getParameter("action");
            String callback = request.getParameter("callback");
            System.out.println(callback);
            // 获取配置
            if ("config".equals(actionType)) {
                exec = StringUtils.isNotEmpty(callback) ? callback + "(" + getConfig() + ")" : getConfig();
            } else {
                if (file == null || file.isEmpty()) {
                    exec =  "error";
                }else {
                    FastdfsFileDTO fileDTO = fileService.fileUpload(file, false);
                    exec = resultMap(fileDTO);
                }
            }
            PrintWriter writer = response.getWriter();
            writer.write(exec);
            writer.flush();
            writer.close();

        } catch (Exception e) {
            logger.info("上传错误");
        }
    }

至此,vue 集成编辑器就此完成。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值