前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >大型项目技术栈第五讲 富文本编辑器

大型项目技术栈第五讲 富文本编辑器

作者头像
易兮科技
发布2020-09-27 17:18:34
8550
发布2020-09-27 17:18:34
举报
文章被收录于专栏:CSDN博客专栏CSDN博客专栏

富文本编辑器

一、vue与UEditor集成

UEditor 是由百度「FEX前端研发团队」开发的所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点

1.前端实现

1.1.下载最新编译的 UEditor并放入项目对应目录

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

将下载的文件夹命名成ueditor后复制到项目的webapp/static目录下

1.2.页面引入VueUeditorWrap组件,该组件是一个Vue + UEditor + v-model 双向绑定的vue组件

代码语言:javascript
复制
<script src="https://cdn.jsdelivr.net/npm/vue-ueditor-wrap@latest/lib/vue-ueditor-wrap.min.js"></script>

引入其他UEditor的js

代码语言:javascript
复制
<script src="static/ueditor/ueditor.config.js"></script>
		<script src="static/ueditor/ueditor.all.js"></script>
		<script type="text/javascript" charset="utf-8"  src="static/ueditor/lang/zh-cn/zh-cn.js"></script>

1.3.注册组件

在需要使用UEditor的页面,创建vue对象,并且设置components属性,components属性是用于引入组件的

代码语言:javascript
复制
components: {
  VueUeditorWrap
}

1.4.v-model绑定数据

在需要使用富文本编辑器的div中使用组件

代码语言:javascript
复制
<vue-ueditor-wrap v-model="msg" :config="myConfig"></vue-ueditor-wrap>

:config用于指定自定义UEditor配置,UEditor的公共配置文件是在 ueditor.config.js

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

参考示例:

代码语言:javascript
复制
var vm = new Vue({
        el:"#main-container",
        components:{
            VueUeditorWrap
        },
        data :{
            myConfig: {
                // 如果需要上传功能,找后端小伙伴要服务器接口地址
                // serverUrl: 'http://localhost:8090/ueditor/ueditorConfig',
                // 你的UEditor资源存放的路径  path是全局声明的应用路径 
                //'/static/ueditor/'是应用下存放ueditor文件位置注意最后一个"/"不能省略
                UEDITOR_HOME_URL: path+'/static/ueditor/' ,
                // 编辑器不自动被内容撑高
                autoHeightEnabled: false,
                // 工具栏是否可以浮动
                autoFloatEnabled: false,
                // 初始容器高度
                initialFrameHeight: 340,
                // 初始容器宽度
                initialFrameWidth: '100%',
                // 关闭自动保存
                enableAutoSave: true,
                // 上传文件接口(
      serverUrl: 'http://35.201.165.105:8000/controller.php'
            },
                msg: '<h2><img src="http://img.baidu.com/hi/jx2/j_0003.gif"/>Vue + UEditor + v-model双向绑定</h2>'
            }

    });

打开页面即可以看到编辑器

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

1.5 获取编辑器对象

代码语言:javascript
复制
<vue-ueditor-wrap @ready="ready"></vue-ueditor-wrap>
代码语言:javascript
复制
methods:{
    ready:function(ueditorObj){
		console.log(`编辑器实例${ueditorObj.key}`,ueditorObj)
    }
}

2.后台实现

2.1 复制文件

解压Ueditor的源码,我们找到其中的这个jsp文件夹,将config.json复制到resources下,src里面的文件夹复制到src/main/java下

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

2.2 导入依赖包

代码语言:javascript
复制
 <dependency>
            <groupId>com.baidu</groupId>
            <artifactId>ueditor</artifactId>
            <version>1.1.2</version>
        </dependency>
        <dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>20170516</version>
        </dependency>

        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.3</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.4</version>
        </dependency>
        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>1.9</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
        </dependency>

前面5个都是ueditor的依赖包,需要注意com.baidu.ueditor这个jar在中央仓库中没有办法找到,需要我们自己打包到本地仓库

idea打开控制台

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

通过mvn命令将我们源码包中jsp文件夹下的lib中的ueditor.jar文件打包到本地仓库

代码语言:javascript
复制
mvn install:install-file -DgroupId=com.baidu -DartifactId=ueditor  -Dversion=1.1.2 -Dpackaging=jar -Dfile
=F:\IdeaProjects\guguanjia_day04\guguanjia\src\main\webapp\WEB-INF\lib\ueditor-1.1.2.jar

-DgroupId:与groupId对应

-DartifactId:与artifactId对应

-Dversion:版本

-Dfile:jar文件的存放路径

2.3 后台配置文件config.json

前端通过设置统一访问接口后,调用后台的统一接口,会根据请求参数中的action的值来进行不同的处理,包括读取后台配置文件和各种上传操作

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

请求配置url:

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

请求单图片上传url:

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

这些请求都是由插件的ueditor.all.js中的事件控制自动发送ajax请求

后台读取到配置文件config.json中的配置就可以知道对应的请求和响应等地址信息

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

由于原逻辑是通过请求一个jsp文件来实现读取配置文件,我们需要修改成controller来实现

2.4 自定义controller实现统一接口

代码语言:javascript
复制
@Controller
@RequestMapping("/manager/ueditor")
public class UEditorController {

    @RequestMapping("config")//统一接口,需要与前端的serverUrl值一致
    @ResponseBody//前端是ajax请求,需要响应数据返回页面
    public String ueditorConfig(HttpServletRequest request, HttpServletResponse response,@RequestParam(name = "upfile",required = false) MultipartFile upfile) {

        response.setContentType("application/json;charset=utf8");
        String rootPath = request.getSession().getServletContext().getRealPath("/");
        String exec = "";
        try {

            String actionType = request.getParameter("action");
            //如果参数action的值是uploadimage,则是图片上传,该值uploadimage与配置文件config.json中的图片设置imageActionName属性一致  其他文件、视频上传也是根据该值判断
            if("uploadimage".equals(actionType) && !upfile.isEmpty()){
                // 做图片上传操作
                exec = uploadImage(upfile);

            }else{//请求配置信息则用默认的Controller.jsp的逻辑
                request.setCharacterEncoding( "utf-8" );
                exec = new ActionEnter(request, rootPath).exec();
            }

        } catch (IOException e) {
//            logger.error("UeditorController#ueditorConfig exception:",e);
        }
        return exec;
    }

    private String uploadImage(MultipartFile file) {
        JSONObject jsonResult = null;//由于图片上传需要返回指定的格式,用json返回
        try {
            String fileName = file.getOriginalFilename();
            String extraName = fileName.substring(fileName.lastIndexOf("."));
            // 这里就是上传图片的具体逻辑了,这里就简单生成个字符串假装上传成功了吧

            String str = UUID.randomUUID().toString();
            String url = "/upload"+str+".png ";
            jsonResult = new JSONObject(resultMap("SUCCESS",url,file.getSize(),fileName,fileName,extraName));

        } catch (Exception e) {
//            logger.warn("UeditorController#uploadImage exception:",e);
            jsonResult = new JSONObject(resultMap("文件上传失败","",0,"","",""));
        }
        return jsonResult.toString();
    }

    //{"state": "SUCCESS","original": "111.jpg","size": "124147","title": "1535961757878095151.jpg","type": ".jpg","url": "/1535961757878095151.jpg"}

    private Map<String,Object> resultMap(String state, String original, long size, String title,String type,  String url){
        Map<String ,Object> result = new HashMap<>();
        result.put("state",state);
        result.put("original",original);
        result.put("size",size);
        result.put("title",title);
        result.put("type",type);
        result.put("url", url);
        return result;
    }

}

2.5 修改读取config.json逻辑

我们将配置文件复制到了资源目录下,所以接下来修改下获取配置文件的源码,找到ConfigManager文件:

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

之后在156行左右找到:

代码语言:javascript
复制
String configContent = this.readFile( this.getConfigPath() );

修改为

代码语言:javascript
复制
String configJsonPath = null;
try {
    configJsonPath = this.getClass().getClassLoader().getResource("config.json").toURI().getPath();
} catch (URISyntaxException e) {
    e.printStackTrace();
}
String configContent = this.readFile( configJsonPath );

按上述一步步操作之后,后台关于获取上传配置文件以及提供上传图片功能就完成了

前端配置的serverurl就是Ueditor访问后台的路径了,将之配置正确之后,就可以测试上传图片功能了。

模拟上传成功后返回的图片路径

代码语言:javascript
复制
http://localhost:8080/guguanjia/upload/a8423c38-671f-4a70-a41f-194ef678ba17.png

2.4 文件上传

文件上传需要给springmvc配置视图解析器

代码语言:javascript
复制
 @Bean("multipartResolver")
    public CommonsMultipartResolver getMultipartResolver(){
        CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
        return multipartResolver;
    }

在配置文件和统一接口中,我们设置了上传封装的文件对象

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

controlle的统一接口

代码语言:javascript
复制
@RequestMapping("config")
    @ResponseBody
    public String ueditorConfig(HttpServletRequest request, HttpServletResponse response,@RequestParam(name = "upfile",required = false) MultipartFile upfile) {
    。。。
    }

注意imageFieldName的值需要与MultipartFile 获取的请求参数名一致

其他步骤参考springmvc文件上传即可完成上传

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-08-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 富文本编辑器
    • 一、vue与UEditor集成
      • 1.前端实现
        • 1.1.下载最新编译的 UEditor并放入项目对应目录
        • 1.2.页面引入VueUeditorWrap组件,该组件是一个Vue + UEditor + v-model 双向绑定的vue组件
        • 1.3.注册组件
        • 1.4.v-model绑定数据
        • 1.5 获取编辑器对象
      • 2.后台实现
        • 2.1 复制文件
        • 2.2 导入依赖包
      • 2.3 后台配置文件config.json
        • 2.4 自定义controller实现统一接口
        • 2.5 修改读取config.json逻辑
        • 2.4 文件上传
    相关产品与服务
    容器服务
    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档