07.LoT.UI 前后台通用框架分解系列之——轻巧的文本编辑器

简介:

LoT.UI汇总:http://www.cnblogs.com/dunitian/p/4822808.html#lotui

上次说的是强大的百度编辑器 http://www.cnblogs.com/dunitian/p/5551701.html 这次说下简洁版而又不失功能的WangEditor

先看看效果

基本上常用功能都有了,下面说下完整的demo:

前端案例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<! DOCTYPE  html>
< html >
< head >
     < meta  http-equiv="Content-Type" content="text/html; charset=utf-8" />
     < title >WangEditor</ title >
     < meta  charset="utf-8" />
     < link  href="Script/WangEditor/css/wangEditor.min.css" rel="stylesheet" />
</ head >
< body >
     < div  id="edit" style="min-height:20em"></ div >
     < br  />
     < input  id="btn1" type="button" value="获取HTML" />  
     < input  id="btn2" type="button" value="获取Text" />
     < div  id="msg"></ div >
     < script  src="//cdn.bootcss.com/jquery/1.10.2/jquery.min.js"></ script >
     < script  src="Script/jquery-1.8.3.min.js"></ script >
     < script  src="Script/WangEditor/js/wangEditor.min.js"></ script >
     < script  type="text/javascript">       
         var editor = new wangEditor('edit');      
         // 上传图片路径
         editor.config.uploadImgUrl = '/Home/Upload';
         // 设置统一参数名
         editor.config.uploadImgFileName = 'file';      
         //编辑器创建
         editor.create();
 
         $('#btn1').click(function () {
             // 获取编辑器区域完整html代码
             var html = editor.$txt.html();
             $('#msg').html(html);
         });
 
         $('#btn2').click(function () {
             // 获取编辑器纯文本内容
             var text = editor.$txt.text();
             // 获取格式化后的纯文本
             //var formatText = editor.$txt.formatText();
             $('#msg').html(text);
         });
     </ script >
</ body >
</ html >

后端代码:(自己写的,如果有什么问题欢迎联系我)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
/// <summary>
         /// 图片上传
         /// </summary>
         /// <returns></returns>
         public  ContentResult Upload(HttpPostedFileBase file)
         {
             if  (file ==  null ) {  return  Content( "error|文件不能为空" ); }
             if  (file.ContentLength > 10485760) {  return  Content( "error|文件10M以内" ); }
             //如果是上传文件,再添加其他格式即可
             string  filterStr =  ".gif,.jpg,.jpeg,.bmp,.png" ;
             string  fileExt = Path.GetExtension(file.FileName).ToLower();
             if  (!filterStr.Contains(fileExt)) {  return  Content( "error|文件后缀不对" ); }
             //防止黑客恶意绕过,从根本上判断下文件后缀
             if  (!file.InputStream.CheckingExt())
             {
                 //todo:一次危险记录
                 return  Content( "error|文件后缀不对" );
             }
 
             //todo: md5判断一下文件是否已经上传过,如果已经上传直接返回 return Content(缩略图地址#sqlPath);
 
             string  path =  string .Format( "{0}/{1}" "/lotFiles" , DateTime.Now.ToString( "yyyy-MM-dd" ));
             string  fileName =  string .Format( "{0}{1}" , Guid.NewGuid().ToString( "N" ), fileExt);
             string  sqlPath =  string .Format( "{0}/{1}" , path, fileName);
             string  dirPath = Request.MapPath(path);
             if  (!Directory.Exists(dirPath)) { Directory.CreateDirectory(dirPath); }
             try
             {
                 //todo:未来写缩略图的代码
                 file.SaveAs(Path.Combine(dirPath, fileName));
                 //todo: 未来写存数据库的Code
             }
             catch  return  Content( "error|文件保存失败" ); }
             return  Content( string .Format( "{0}#{1}" , sqlPath, sqlPath)); //第一个sqlPath以后换成缩略图的地址
         }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
/// <summary>
     /// 判断扩展名是否是指定类型---默认是判断图片格式,符合返回true(没有释放stream,请手动:file.InputStream.Dispose();)
     /// eg:图片+压缩+文档:"7173", "255216", "6677", "13780", "8297", "55122", "8075", "208207"
     /// eg:img,"7173", "255216", "6677", "13780" //gif  //jpg  //bmp //png
     /// eg:file,"8297", "55122", "8075", "208207" //rar //7z //zip + 文档系列
     /// </summary>
     /// <param name="stream">文件流</param>
     /// <param name="fileTypes">文件扩展名</param>
     /// <returns></returns>
     public  static  bool  CheckingExt( this  Stream stream,  params  string [] fileTypes)
     {
         if  (fileTypes ==  null  || fileTypes.Length == 0) { fileTypes =  new  string [] {  "7173" "255216" "6677" "13780"  }; }
         bool  result =  false ;
         string  fileclass =  "" ;
 
         #region 读取头两个字节
         var  reader =  new  BinaryReader(stream);
         byte [] buff =  new  byte [2];
         try
         {
             reader.Read(buff, 0, 2); //读取每个文件的头两个字节
             fileclass = buff[0].ToString() + buff[1].ToString();
         }
         catch  (System.Exception ex) { stream.Dispose(); reader.Dispose();  return  false ; }
         #endregion
 
         #region 校验
         for  ( int  i = 0; i < fileTypes.Length; i++)
         {
             if  (fileclass == fileTypes[i])
             {
                 result =  true ;
                 break ;
             }
         }
         #endregion
         return  result;
     }

 

完整demo:https://github.com/dunitian/LoTCodeBase/tree/master/NetCode/3.常用技能/03.Editor/03.WangEditor


本文转自毒逆天博客园博客,原文链接:http://www.cnblogs.com/dunitian/p/5640053.html,如需转载请自行联系原作者

相关文章
|
6月前
|
自然语言处理 安全 JavaScript
HarmonyOsNEXT【ArkUI超全解析】新手必看的方舟UI框架指南!
本文是HarmonyOS NEXT方舟UI框架新手指南,涵盖ArkTS开发核心知识点。从UI与组件基础概念到声明式开发优势,再到ArkTS代码实战,包括组件创建、属性设置、事件绑定等。通过实例解析自定义组件开发流程,提供避坑技巧与代码风格建议,助你快速掌握ArkUI框架精髓,轻松构建高效、美观的HarmonyOS应用界面。适合初学者及希望转型声明式开发的开发者学习参考。
275 2
|
11月前
|
数据采集 人工智能 自然语言处理
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
Midscene.js 是一款基于 AI 技术的 UI 自动化测试框架,通过自然语言交互简化测试流程,支持动作执行、数据查询和页面断言,提供可视化报告,适用于多种应用场景。
2849 1
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
|
8月前
|
Android开发 UED iOS开发
Harmony os next~UI开发与ArkUI框架
鸿蒙OS的UI开发基于ArkUI框架,采用声明式编程,简化开发流程。五大核心组件(Text、Button、List、Grid、Flex)助力高效布局,支持数据绑定与动态更新。事件响应机制灵敏,适合构建交互丰富的应用。实战技巧包括规范命名、样式复用和调试方法。掌握这些,轻松开发鸿蒙应用。下期预告:分布式开发,记得带上烤冷面!
284 0
|
9月前
|
前端开发 数据安全/隐私保护 开发者
FirstUI:Deepseek能帮我们做很多事情,而这款开源框架专为开发者设计的开源UI框架,让你的项目加速起飞
嗨,大家好,我是小华同学。今天为大家介绍一个轻量级、响应式的前端UI框架——FirstUI。它提供丰富的组件库,包括按钮、输入框、下拉菜单等,帮助开发者快速构建美观、功能丰富的用户界面。FirstUI的核心理念是“简单、快速、高效”,适合各种Web应用开发,如企业网站、电商平台和个人博客。其体积小、加载快,支持响应式设计,并且易于定制。FirstUI拥有活跃的社区支持,开发者可以轻松找到帮助并分享经验。欢迎关注我们,获取更多优质开源项目和高效工作学习方法。
392 0
|
6月前
|
开发框架 前端开发 JavaScript
【HarmonyOS Next之旅】基于ArkTS开发(二) -> UI开发一
本文介绍了方舟开发框架(ArkUI)及其两种开发范式:基于ArkTS的声明式开发范式和类Web开发范式。ArkUI是用于构建HarmonyOS应用界面的UI框架,提供极简UI语法和基础设施。声明式开发范式使用ArkTS语言,以组件、动画和状态管理为核心,适合复杂团队协作;类Web开发范式采用HML、CSS、JavaScript三段式开发,适用于简单界面应用,贴近Web开发者习惯。文中还概述了两者的架构和基础能力,帮助开发者选择合适的范式进行高效开发。
221 15
|
6月前
|
编解码 前端开发 Java
【HarmonyOS Next之旅】基于ArkTS开发(二) -> UI开发三
本文介绍了基于声明式UI范式的图形绘制与动画效果实现方法,涵盖绘制图形、添加动画效果及常见组件说明三部分内容。在绘制图形部分,详细讲解了如何通过Circle组件为食物成分表添加圆形标签,以及使用Path组件结合SVG命令绘制自定义图形(如应用Logo)。动画效果部分则展示了如何利用animateTo实现闪屏动画,包括渐出、放大效果,并设置页面跳转;同时介绍了页面间共享元素转场动画的实现方式。最后,文章列举了声明式开发范式中的各类组件及其功能,帮助开发者快速上手构建复杂交互页面。
249 11
|
2月前
|
存储 开发者 容器
鸿蒙 HarmonyOS NEXT星河版APP应用开发-ArkTS面向对象及组件化UI开发使用实例
本文介绍了ArkTS语言中的Class类、泛型、接口、模块化、自定义组件及状态管理等核心概念,并结合代码示例讲解了对象属性、构造方法、继承、静态成员、访问修饰符等内容,同时涵盖了路由管理、生命周期和Stage模型等应用开发关键知识点。
296 1
鸿蒙 HarmonyOS NEXT星河版APP应用开发-ArkTS面向对象及组件化UI开发使用实例
|
5月前
|
JavaScript 前端开发 UED
【HarmonyOS Next之旅】基于ArkTS开发(二) -> UI开发四
本文介绍了Web组件开发与性能优化的相关内容。在Web组件开发部分,涵盖创建组件、设置样式与属性、添加事件和方法以及场景示例,如动态播放视频。性能提升方面,推荐使用数据懒加载、条件渲染替代显隐控制、Column/Row替代Flex、设置List组件宽高及调整cachedCount减少滑动白块等方法,以优化应用性能与用户体验。
242 56
|
5月前
|
编解码 UED 开发者
【HarmonyOS Next之旅】基于ArkTS开发(二) -> UI开发之常见布局
本文主要介绍了自适应布局与响应式布局的相关内容。自适应布局部分涵盖线性布局、层叠布局、弹性布局和网格布局,详细说明了各布局的特性及使用方法,例如线性布局中的排列、拉伸与缩放,弹性布局的方向、换行与对齐方式等。响应式布局则重点讲解了栅格系统和媒体查询,阐述如何通过栅格组件和媒体查询条件实现不同设备上的适配效果。这些技术帮助开发者灵活应对多尺寸屏幕的设计需求,提升用户体验。
333 55

热门文章

最新文章

下一篇
oss云网关配置