KindEditor编辑图文文章实战开发

2024-02-03 06:10

本文主要是介绍KindEditor编辑图文文章实战开发,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

写在前面:

在项目开发过程中,我们经常会遇到需要用户输入一些较长的文本,这些文本通常情况下带有相应的格式,就比如加粗、背景颜色、加入的图片等等,因此我们就需要借助于文本编辑器这样的小插件,今天给大家介绍一个文本编辑器————KindEditor
http://kindeditor.net/about.php 附上官网链接

什么是KindEditor:

KindEditor 是一套开源的在线HTML编辑器,主要用于让用户在网站上获得所见即所得编辑效果,开发人员可以用 KindEditor 把传统的多行文本输入框(textarea)替换为可视化的富文本输入框。 KindEditor 使用 JavaScript 编写,可以无缝地与 Java、.NET、PHP、ASP 等程序集成,比较适合在 CMS、商城、论坛、博客、Wiki、电子邮件等互联网应用上使用。

在这里插入图片描述
上图的文本为了保存格式,就不能以简单的文本进行存储,我们需要带上对应的样式进行存储:

<p style="text-align:center;"><strong><span style="color:#E53333;">Think Different</span></strong>
</p>
<h4>&nbsp;&nbsp;&nbsp;&nbsp;Here’s to the crazy ones. The misfits. The rebels.<em> The troublemakers. The round pegs in the square holes.</em> The ones who see things differently. They’re not fond of rules. And they have no respect for the status quo.&nbsp;
</h4>
<p>&nbsp;&nbsp;&nbsp;<span style="color:#337FE5;">&nbsp;</span><span style="color:#337FE5;">You can quote them, disagree with them</span>, glorify or vilify them. <u>About the only thing you can’t do is ignore them</u>. Because they change things. They push the human race forward. And while some may see them as the crazy ones, we see genius. Because the people who are crazy enough to think they can change the world, are the ones who do.
</p>
<p><br />
</p>

图中的效果很明了,存储的文本带着相关的标签进行存储,也就是带着相关的格式进行存储,保证格式不丢失。
**~~

KindEditor编辑图文文章实战开发:

预期效果展示;
在这里插入图片描述
简单介绍:
1、点击图片按钮:
在这里插入图片描述
2、网络图片和本地上传
在这里插入图片描述
网络图片:指的就是网络资源中的图片url
图片空间:指的是本地服务器上已经存在的图片
本地上传: 将本地的图片上传到编辑器

3.开发思路
本地上传实际上就是将本地的图片上传到服务器中,然后咋编辑器中对图片偏进行一个回显。图片空间的实现思路也是如此。

前端代码实现:

<%@page pageEncoding="UTF-8" isELIgnored="false"  %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<c:set var="path" value="${pageContext.request.contextPath}"/><%--引入kindEditor开发依赖的js文件--%>
<script charset="utf-8" src="${path}/kindeditor/kindeditor-all.js"></script>
<script charset="utf-8" src="${path}/kindeditor/lang/zh-CN.js"></script>
<script>KindEditor.ready(function(K) {K.create('#editor_id', {//图片上传的请求uploadJson:"${path}/editor/upload",//上传图片的名字,默认为imgFilefilePostName:"photo",//管理图片空间allowFileManager:true,//查询服务器图片的请求,在图片空间中进行回显fileManagerJson:"${path}/editor/queryAllPhoto",//将编辑器中的内容整合到form表单中,这里我们用不到,可以删除afterBlur:function(){ //编辑器失去焦点(blur)时执行的回调函数this.sync();   //将编辑器中的内容同步到表单}});});
</script><%--准备编辑器容器--%>
<textarea id="editor_id" name="content" style="width:700px;height:300px;">
&lt;strong&gt;HTML内容&lt;/strong&gt;
</textarea>

后台代码实现:

1、本地文件上传
插件要求我们的返回值类型为map。

 @RequestMapping("upload")public HashMap<String,Object> upload(MultipartFile photo, HttpServletRequest request) throws IOException {HashMap<String, Object> map = new HashMap<>();//获取文件上传路径String realPath = request.getSession().getServletContext().getRealPath("/upload/edit");File file = new File(realPath);if(!file.exists()){file.mkdirs();}//获取文件名String filename = photo.getOriginalFilename();//给文件名加上时间戳String newFileName = new Date().getTime()+"-"+filename;//获取httpString scheme = request.getScheme();//获取本地ipString serverName = request.getServerName();//获取端口号int serverPort = request.getServerPort();//获取项目名String contextPath = request.getContextPath();//网络路径拼接String s = scheme + "://" + serverName + ":" + serverPort+contextPath + "/upload/edit"+"/"+ newFileName;System.out.println(s);try {photo.transferTo(new File(realPath,newFileName));map.put("error", 0);map.put("url", s);} catch (IOException e) {e.printStackTrace();map.put("error", 1);map.put("url", "上传失败");}return map;}

2.图片空间
图片空间部分要求我们返回的数据格式如下:
样例数据:

{"moveup_dir_path": "","current_dir_path": "","current_url": "\/ke4\/php\/..\/attached\/","total_count": 5,"file_list": [{"is_dir": false,"has_file": false,"filesize": 245132,"dir_path": "","is_photo": true,"filetype": "jpg","filename": "2009321101428.jpg","datetime": "2018-06-06 00:36:39"}]
}

因此我们在开发的过程中,要严格遵守插件给我们的约束,按照"要什么,给什么"的原则进行开发。

@RequestMapping("queryAllPhoto")public HashMap<String,Object> queryAllPhoto(HttpServletRequest request){HashMap<String, Object> maps = new HashMap<>();ArrayList<Object> lists = new ArrayList<>();//获取图片文件夹的路径String realPath = request.getSession().getServletContext().getRealPath("/upload/edit");//获取文件夹File file = new File(realPath);//获取文件夹下所有的文件名称String[] names = file.list();for (int i = 0; i < names.length; i++) {//获取文件名字String name = names[i];HashMap<String, Object> map = new HashMap<>();map.put("is_dir",false); //是否是文件夹map.put("has_file",false); //是否是文件File file1 = new File(realPath, name);map.put("filesize",file1.length()); //文件的大小map.put("is_photo",true); //是否是图片String extension = FilenameUtils.getExtension(name);map.put("filetype",extension); //图片的格式map.put("filename",name); //文件的名字//字符串拆分   1564712632627-下载.jpgString[] split = name.split("-");String times = split[0];long time = Long.parseLong(times);SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh-mm-ss");String format = dateFormat.format(time);map.put("datetime",format); //上传的时间//封装进集合lists.add(map);}maps.put("current_url","http://localhost:8989/cmfz_lsg/upload/edit/"); //网络路径maps.put("total_count",lists.size());  //文件数量maps.put("file_list",lists);  //文件集合return maps;}

这篇关于KindEditor编辑图文文章实战开发的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/673201

相关文章

网页解析 lxml 库--实战

lxml库使用流程 lxml 是 Python 的第三方解析库,完全使用 Python 语言编写,它对 XPath表达式提供了良好的支 持,因此能够了高效地解析 HTML/XML 文档。本节讲解如何通过 lxml 库解析 HTML 文档。 pip install lxml lxm| 库提供了一个 etree 模块,该模块专门用来解析 HTML/XML 文档,下面来介绍一下 lxml 库

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta

滚雪球学Java(87):Java事务处理:JDBC的ACID属性与实战技巧!真有两下子!

咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE啦,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~ 🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!! 环境说明:Windows 10