700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > mysql富文本编辑器_项目集成富文本编辑器

mysql富文本编辑器_项目集成富文本编辑器

时间:2019-09-13 05:12:06

相关推荐

mysql富文本编辑器_项目集成富文本编辑器

聊聊富文本编辑器

简介

思考:我们平时在博客园,或者CSDN等平台进行写作的时候,有同学思考过他们的编辑器是怎么实现的吗?

在博客园后台的选项设置中,可以看到一个文本编辑器的选项:

其实这个就是富文本编辑器,市面上有许多非常成熟的富文本编辑器,比如:

Editor.md——功能非常丰富的编辑器,左端编辑,右端预览,非常方便,完全免费

wangEditor——基于javascript和css开发的 Web富文本编辑器, 轻量、简洁、界面美观、易用、开源免费。

TinyMCE——TinyMCE是一个轻量级的基于浏览器的所见即所得编辑器,由JavaScript写成。它对IE6+和Firefox1.5+都有着非常良好的支持。功能齐全,界面美观,就是文档是英文的,对开发人员英文水平有一定要求。

百度ueditor——UEditor是由百度web前端研发部开发所见即所得富文本web编辑器,具有轻量,功能齐全,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码,缺点是已经没有更新了

Textbox——Textbox是一款极简但功能强大的在线文本编辑器,支持桌面设备和移动设备。主要功能包含内置的图像处理和存储、文件拖放、拼写检查和自动更正。此外,该工具还实现了屏幕阅读器等辅助技术,并符合WAI-ARIA可访问性标准。

quill——功能强大,还可以编辑公式等

froala Editor——界面非常好看,功能非常强大,非常好用(非免费)

总之,目前可用的富文本编辑器有很多......这只是其中的一部分

Editor.md

我这里使用的就是Editor.md,作为一个资深码农,Mardown必然是我们程序猿最喜欢的格式,看下面,就爱上了!

解压以后,在examples目录下面,可以看到他的很多案例使用!学习,其实就是看人家怎么写的,然后进行模仿就好了!

我们可以将整个解压的文件倒入我们的项目,将一些无用的测试和案例删掉即可!

基础工程搭建

数据库设计

article:文章表

建表SQL:

CREATE TABLE `article` (

`id` int(10) NOT NULL AUTO_INCREMENT COMMENT 'int文章的唯一ID',

`author` varchar(50) NOT NULL COMMENT '作者',

`title` varchar(100) NOT NULL COMMENT '标题',

`content` longtext NOT NULL COMMENT '文章的内容',

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8

基础项目搭建

1、建一个SpringBoot项目配置

spring:

datasource:

username: root

password: 123456

#?serverTimezone=UTC解决时区的报错

url: jdbc:mysql://localhost:3306/springboot?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8

driver-class-name: com.mysql.cj.jdbc.Driver

2、实体类:

//文章类

@Data

@NoArgsConstructor

@AllArgsConstructor

public class Article implements Serializable {

private int id; //文章的唯一ID

private String author; //作者名

private String title; //标题

private String content; //文章的内容

}

3、mapper接口:

@Mapper

@Repository

public interface ArticleMapper {

//查询所有的文章

List queryArticles();

//新增一个文章

int addArticle(Article article);

//根据文章id查询文章

Article getArticleById(int id);

//根据文章id删除文章

int deleteArticleById(int id);

}

/p>

"/dtd/mybatis-3-mapper.dtd">

select * from article

select * from article where id = #{id}

insert into article (author,title,content) values (#{author},#{title},#{content});

delete from article where id = #{id}

既然已经提供了 myBatis 的映射配置文件,自然要告诉 spring boot 这些文件的位置

mybatis:

mapper-locations: classpath:com/kuang/mapper/*.xml

type-aliases-package: com.kuang.pojo

编写一个Controller测试下,是否ok;

文章编辑整合(重点)

1、导入 editor.md 资源 ,删除多余文件

2、编辑文章页面 editor.html、需要引入 jQuery;

秦疆'Blog

标题:

作者:

var testEditor;

//window.onload = function(){ }

$(function() {

testEditor = editormd("article-content", {

width : "95%",

height : 400,

syncScrolling : "single",

path : "../editormd/lib/",

saveHTMLToTextarea : true, // 保存 HTML 到 Textarea

emoji: true,

theme: "dark",//工具栏主题

previewTheme: "dark",//预览主题

editorTheme: "pastel-on-dark",//编辑主题

tex : true, // 开启科学公式TeX语言支持,默认关闭

flowChart : true, // 开启流程图支持,默认关闭

sequenceDiagram : true, // 开启时序/序列图支持,默认关闭,

//图片上传

imageUpload : true,

imageFormats : ["jpg", "jpeg", "gif", "png", "bmp", "webp"],

imageUploadURL : "/article/file/upload",

onload : function() {

console.log('onload', this);

},

/*指定需要显示的功能按钮*/

toolbarIcons : function() {

return ["undo","redo","|",

"bold","del","italic","quote","ucwords","uppercase","lowercase","|",

"h1","h2","h3","h4","h5","h6","|",

"list-ul","list-ol","hr","|",

"link","reference-link","image","code","preformatted-text",

"code-block","table","datetime","emoji","html-entities","pagebreak","|",

"goto-line","watch","preview","fullscreen","clear","search","|",

"help","info","releaseIcon", "index"]

},

/*自定义功能按钮,下面我自定义了2个,一个是发布,一个是返回首页*/

toolbarIconTexts : {

releaseIcon : "发布",

index : "返回首页",

},

/*给自定义按钮指定回调函数*/

toolbarHandlers:{

releaseIcon : function(cm, icon, cursor, selection) {

//表单提交

mdEditorForm.method = "post";

mdEditorForm.action = "/article/addArticle";//提交至服务器的路径

mdEditorForm.submit();

},

index : function(){

window.location.href = '/';

},

}

});

});

3、编写Controller,进行跳转,以及保存文章

@Controller

@RequestMapping("/article")

public class ArticleController {

@GetMapping("/toEditor")

public String toEditor(){

return "editor";

}

@PostMapping("/addArticle")

public String addArticle(Article article){

articleMapper.addArticle(article);

return "editor";

}

}

图片上传问题

1、前端js中添加配置

//图片上传

imageUpload : true,

imageFormats : ["jpg", "jpeg", "gif", "png", "bmp", "webp"],

imageUploadURL : "/article/file/upload", // //这个是上传图片时的访问地址

2、后端请求,接收保存这个图片, 需要导入 FastJson 的依赖!

//博客图片上传问题

@RequestMapping("/file/upload")

@ResponseBody

public JSONObject fileUpload(@RequestParam(value = "editormd-image-file", required = true) MultipartFile file, HttpServletRequest request) throws IOException {

//上传路径保存设置

//获得SpringBoot当前项目的路径:System.getProperty("user.dir")

String path = System.getProperty("user.dir")+"/upload/";

//按照月份进行分类:

Calendar instance = Calendar.getInstance();

String month = (instance.get(Calendar.MONTH) + 1)+"月";

path = path+month;

File realPath = new File(path);

if (!realPath.exists()){

realPath.mkdirs();

}

//上传文件地址

System.out.println("上传文件保存地址:"+realPath);

//解决文件名字问题:我们使用uuid;

String filename = "ks-"+UUID.randomUUID().toString().replaceAll("-", "");

//通过CommonsMultipartFile的方法直接写文件(注意这个时候)

file.transferTo(new File(realPath +"/"+ filename));

//给editormd进行回调

JSONObject res = new JSONObject();

res.put("url","/upload/"+month+"/"+ filename);

res.put("success", 1);

res.put("message", "upload success!");

return res;

}

3、解决文件回显显示的问题,设置虚拟目录映射!在我们自己拓展的MvcConfig中进行配置即可!

@Configuration

public class MyMvcConfig implements WebMvcConfigurer {

// 文件保存在真实目录/upload/下,

// 访问的时候使用虚路径/upload,比如文件名为1.png,就直接/upload/1.png就ok了。

@Override

public void addResourceHandlers(ResourceHandlerRegistry registry) {

registry.addResourceHandler("/upload/**")

.addResourceLocations("file:"+System.getProperty("user.dir")+"/upload/");

}

}

表情包问题

自己手动下载,emoji 表情包,放到图片路径下:/editormd/plugins/emoji-dialog/emoji/

修改editormd.js文件

// Emoji graphics files url path

editormd.emoji = {

path : "../editormd/plugins/emoji-dialog/emoji/",

ext : ".png"

};

文章展示

1、Controller 中增加方法

@GetMapping("/{id}")

public String show(@PathVariable("id") int id,Model model){

Article article = articleMapper.getArticleById(id);

model.addAttribute("article",article);

return "article";

}

2、编写页面 article.html

作者:

var testEditor;

$(function () {

testEditor = editormd.markdownToHTML("doc-content", {//注意:这里是上面DIV的id

htmlDecode: "style,script,iframe",

emoji: true,

taskList: true,

tocm: true,

tex: true, // 默认不解析

flowChart: true, // 默认不解析

sequenceDiagram: true, // 默认不解析

codeFold: true

});});

重启项目,访问进行测试!大功告成!

小结:

有了富文本编辑器,我们网站的功能就会又多一项,大家到了这里完全可以有时间写一个属于自己的博客网站了,根据所学的知识是完全没有任何问题的!

写在最后

其实本功能所依赖的文件只有这么多,不用全部导入进项目,影响服务器的运行效率,和项目承载的压力!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。