一、redis搭建

二、WEB层主要依赖包

三、FeignClient通用接口

以上三项,参考《微服务迁移记(五):WEB层搭建(1)

四、SpringSecurity集成

参考:《微服务迁移记(五):WEB层搭建(2)-SpringSecurity集成

五、FreeMarker集成

参考:《微服务迁移记(五):WEB层搭建(3)-FreeMarker集成

六、简单权限管理

参考:《微服务迁移记(五):WEB层搭建(4)-简单的权限管理

七、集成多功能编辑器:ueditor,实现应用将图片等附件保存到应用外

对于一款MIS系统、CMS系统等,一多功能编辑器是必不可少的组件。目前用的比较多的有百度的ueditor、ckeditor等。本文将详细介绍集成ueditor的过程。

1. 下载ueditor

官网地址:http://ueditor.baidu.com/website/,下载utf8 jsp版本。

解压后删除jsp目录,然后拷到/resources/static/ueditor_1_4_3_3

2. 必要的包导入

注意:com.gitee.qdbp.thirdparty这个是一哥们扔到码云上的,可以直接拿来用。你也可以把源代码导出来放到自己项目中进行重构。

 <dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
</dependency>
<dependency>
<groupId>com.gitee.qdbp.thirdparty</groupId>
<artifactId>ueditor</artifactId>
<version>1.4.3.3</version>
</dependency>

3. 前台html集成

<script type="text/javascript" charset="utf-8" src="/ueditor1_4_3_3/ueditor.config.js"></script>
<script type="text/javascript" charset="utf-8" src="/ueditor1_4_3_3/ueditor.all.min.js"></script>
<!--可选-->
<script type="text/javascript" src="/ueditor1_4_3_3/lang/zh-cn/zh-cn.js"></script>
$(function () {
//ueditor初始化
var um = UE.getEditor('article_content',{
textarea:"article_content"
});
um.ready(function(){
um.setContent('${article.article_content}');
});
});

通过上面3个步骤,打开页面后,可以看到编辑器已经可以用了。但是图片、附件上传功能不可用,需要再做额外配置。

4. 文件上传配置

先看下官方示例,ueditor.config.js指定配置URL地址为jsp/controller.jsp,再由jsp/controller.jsp指定config.json的路径,在config.json里配置上传路径等信息。

明白这个原理后,我们就可以把URL地址改成任意我们定义的一个controller。

新建UeditorController,映射访问地址为:/ueconfig,然后我们把ueditor.config.js里的URL改为这个地址

// 服务器统一请求接口路径
serverUrl: "/ueconfig"

控制器中,我们模仿官方示例编写如下代码:

@RequestMapping("/ueconfig")
public void config(String action,HttpServletRequest request, HttpServletResponse response){
response.setContentType("application/json");
String rootPath = request.getSession().getServletContext().getRealPath("/");try {
String exec = new ActionEnter(request, rootPath).exec();
PrintWriter writer = response.getWriter();
writer.write(exec);
writer.flush();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}

基本上到这里,我们把config.js拷到resources根目录下,就可以实现附件上传了。

我们再考虑一个问题:最终项目我是要打成war包发布到服务器,附件肯定不能放到项目目录,我们可以将附件放到磁盘目录下,每次访问附件时,需要再转换一下,这样还是比较麻烦,还需要改ueditor源码实现图片显示、在线管理等。

本人比较懒,一直不想把第三方源码导到项目里,灵机一动想了一个偷懒的办法:

1)本地先扔一个tomcat,端口号:8081,在webapp下新建一个目录zyproject,启动后访问路径就是:http://127.0.0.1/zyproject

2)断点源码后发现,每次初始化编辑器,先访问ueconfig的时候,会传一个action过来,action可能有config(配置config.json路径)、listfile、listimage(这两个是ue编辑器在线管理显示已上传附件列表用的,后面会用到)。

我把config.json里,所有Prefix都加上一个前缀:http://127.0.0.1/zyproject。

如:"imageUrlPrefix": "http://127.0.0.1:8081/zyproject", /* 图片访问路径前缀 */

config.json我也扔到附件的外部tomcat下了,所以在分布式配置中心加一条记录

INSERT INTO tb_config_server(akey,avalue,application,aprofile,label)
VALUES ('filePath','D:\\tomcat\\webapps\\zyproject','zyproject-web','dev','dev');

这样以后,所有上传、涂鸦等均无问题了。但仍然存在另一个问题,就是在线管理,uedtiro会将所有上传的图片或附件列表展示出来,供选择插入内容中。跟踪代码发现,在线管理会自动把rootPath也加到列表附件的路径中,比如一个图片路径是:http://127.0.0.1/zyproject/upload/ueditor/editor/20200301/1583058554450067578.png,在线管理会解释成这样:

http://127.0.0.1/zyproject/D:/tomcat/webapps/zyproject/upload/ueditor/editor/20200301/1583058554450067578.png,造成图片查询不到,于是对UeditorController改造如下(把rootPath给替换掉):

 @Value("${filePath}")
private String filePath; @RequestMapping("/ueconfig")
public void config(String action,HttpServletRequest request, HttpServletResponse response){
response.setContentType("application/json");
//String rootPath = Thread.currentThread().getContextClassLoader().getResource("").getPath();
String rootPath = filePath;
try {
String exec = new ActionEnter(request, rootPath).exec();
//解决ueditor 列出文件或图片,会把rootpapth加上的问题
if( action!=null &&
(action.equals("listfile") || action.equals("listimage") ) ){
rootPath = rootPath.replace("\\\\", "/");
exec = exec.replaceAll(rootPath, "");
}
PrintWriter writer = response.getWriter();
writer.write(exec);
writer.flush();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}

最终效果如下:

微服务迁移记(五):WEB层搭建(5)-集成ueditor编辑器,伪分布式图片上传的更多相关文章

  1. 微服务迁移记(五):WEB层搭建(2)-SpringSecurity集成

    一.redis搭建 二.WEB层主要依赖包 三.FeignClient通用接口 以上三项,参考<微服务迁移记(五):WEB层搭建(1)> 接下来,集成SpringSecruity,实现用户 ...

  2. 微服务迁移记(五):WEB层搭建(3)-FreeMarker集成

    一.redis搭建 二.WEB层主要依赖包 三.FeignClient通用接口 以上三项,参考<微服务迁移记(五):WEB层搭建(1)> 四.SpringSecurity集成 参考:< ...

  3. 微服务迁移记(五):WEB层搭建(4)-简单的权限管理

    一.redis搭建 二.WEB层主要依赖包 三.FeignClient通用接口 以上三项,参考<微服务迁移记(五):WEB层搭建(1)> 四.SpringSecurity集成 参考:< ...

  4. 从web编辑器 UEditor 中单独提取图片上传,包含多图片单图片上传以及在线涂鸦功能

    UEditor是由百度web前端研发部开发所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码.(抄的...) UEditor是非常好用的富文 ...

  5. 微服务迁移记(五):WEB层搭建(1)

    WEB层是最终表现层,注册至注册中心,引用接口层(不需要引用实现层).公共服务层.用户登录使用SpringSecurity,Session保存在redis中,权限管理没有用SpringSecurity ...

  6. 关于web项目中的图片上传、并在前端显示问题(tomcat中配置文件上传虚拟路径)

    一.数据库存储 直接把图片的二进制码存到数据库,可参考blog:http://blog.csdn.net/hope2jiang/article/details/590733 直接存图片在mysql上面 ...

  7. 【转】关于web项目中的图片上传、并在前端显示问题(tomcat中配置文件上传虚拟路径)

    一.数据库存储 直接把图片的二进制码存到数据库,可参考blog:http://blog.csdn.net/hope2jiang/article/details/590733 直接存图片在mysql上面 ...

  8. docker微服务部署之:二、搭建文章微服务项目

    docker微服务部署之:一,搭建Eureka微服务项目 一.新增demo_article模块,并编写代码 右键demo_parent->new->Module->Maven,选择M ...

  9. docker微服务部署之:三,搭建Zuul微服务项目

    docker微服务部署之:二.搭建文章微服务项目 一.新增demo_eureka模块,并编写代码 右键demo_parent->new->Module->Maven,选择Module ...

随机推荐

  1. django admin 添加用户出现外键约束错误

    今天在做mxonline项目时,注册了用户表进admin后,想在后台添加一个用户试试,结果出现了错误,经过一番搜索发现以下两个解决方法,不过我只用了一种 报错信息: IntegrityError: ( ...

  2. (八十九)c#Winform自定义控件-自定义滚动条(treeview、panel、datagridview、listbox、listview、textbox)

    官网 http://www.hzhcontrols.com/ 前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kw ...

  3. java面试知识迷你版

    java基础JUC.AQSJVM类加载过程mybatisSpringspringboot设计模式数据库redis网络问题认证授权Nginxlinux其他lombok消息队列ES缓存分库分表设计高并发系 ...

  4. 5000+字硬核干货!Redis 分布式集群部署实战

    原理: Redis集群采用一致性哈希槽的方式将集群中每个主节点都分配一定的哈希槽,对写入的数据进行哈希后分配到某个主节点进行存储. 集群使用公式(CRC16 key)& 16384计算键key ...

  5. Python18行代码做出来这样有点浪漫,又有点极客的“内涵”图

    今天就来教大家这个套路: 如何使用 Python 来做出来这样有点浪漫,又有点极客的“内涵”图. 当然,能不能靠它得到心仪对象的青睐,就要靠你(命)了.(๑•́₃ •̀๑) 那么要怎么做呢? 我们先找 ...

  6. centOS7:创建的新用户如何获得写权限

    要在root用户下使用 1.新建用户 adduser testuser //新建testuser 用户 passwd testuser //给testuser 用户设置密码 2.赋予root权限 方法 ...

  7. 不用加减乘除做加法(剑指offer-48)

    题目描述 写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号. 题目解析 首先看十进制是如何做的: 5+7=12,三步走 第一步:相加各位的值,不算进位,得到2. 第二步:计 ...

  8. Unity音量可视化——粒子随声浪跳动

    起初是看到这么一篇博客 Shader特效-- 音符跳动,效果如下图 具体的shader代码就不贴在这里了,他的博客里都有. 处理音频的关键代码如下: private int m_NumSamples ...

  9. Redis 6.0 redis-cluster-proxy 说明

    背景 Redis3.0版本之后开始支持了Redis Cluster,Redis也开始有了分布式缓存的概念.关于Redis Cluster的相关说明,可以看之前的几篇文章:Redis Cluster 原 ...

  10. day11总结

    """1.什么是函数 具备某一功能的工具===>函数 事先准备工具的过程===>函数的定义 遇到应用场景拿来就用=>函数的调用 2.为何要有函数 内置函 ...