在ASP.NET Core中使用百度在线编辑器UEditor

0x00 起因

最近需要一个在线编辑器,之前听人说过百度的UEditor不错,去官网下了一个。不过服务端只有ASP.NET版的,如果是为了能尽快使用,只要把ASP.NET版的服务端作为应用部署在IIS上就可以立即使用了。不过我的需求并不急,所以把ASP.NET移植到了ASP.NET Core上。整个过程很简单,只是重新引用了一些包,修改了几处代码,另外就是把Controller中比较长的一个switch语句块重构为了字典,根据url中的action参数从字典中找出并调用相应的Action处理,这样的好处就是如果要扩展action支持的操作无需修改源代码,只要扩展字典就可以,对扩展开放,对修改关闭。最后把服务端功能打成了nuget包UEditorNetCore,方便使用。这篇博客主要就介绍下如何使用UEditorNetCore快速实现UEditor服务端,也可以直接使用源代码中的示例,希望对有这方面需求的园友有所帮助。

0x01 总体设计

 

当接收到action后,UEditorService会从UEditorActionCollection中找到这个action对应的方法并调用,同时传入HttpContext参数。这些方法调用基层的服务XxxxHandler完成功能,并把返回内容通过HttpContext.Response.WriteAsync()方法写入。如果要扩展对action的支持,可以扩展UEditorActionCollection,具体方法后面有介绍。

0x02 如何使用UEditorNetCore

1.安装UEditorNetCore

Install-Package UEditorNetCore

2.在Startup.cs的ConfigureServices方法中添加UEditorNetCore服务

public void ConfigureServices(IServiceCollection services)
{//第一个参数为配置文件路径,默认为项目目录下config.json//第二个参数为是否缓存配置文件,默认false  services.AddUEditorService()services.AddMvc();
}

3.添加Controller用于处理来自UEditor的请求

[Route("api/[controller]")] //配置路由
public class UEditorController : Controller {  
   
private UEditorService ue;  

   
public UEditorController(UEditorService ue){        this.ue = ue;}  

   
public void Do(){ue.DoAction(HttpContext);} }

4.修改前端配置文件ueditor.config.js

serverUrl需要参照第3步Controller中配置的路由,按照上面步骤3中的配置,需要以下配置:

serverUrl:"/api/UEditor"

这样配置后当前端要获取服务端UEditor配置时就会访问/api/UEditor?action=config。

5.修改服务端配置config.json

上传类的操作需要配置相应的PathFormat和Prefix。示例部署在web根目录,因此Prefix都设置为"/"。使用时要根据具体情况配置。 例如示例中图片上传的配置如下:

"imageUrlPrefix": "/", /* 图片访问路径前缀 */"imagePathFormat": "upload/image/{yyyy}{mm}{dd}/{time}{rand:6}",

关于PathFormat的详细配置可参照官方文档。

6.添加javascript引用

<script type="text/javascript" charset="utf-8" src="~/lib/ueditor/ueditor.config.js"></script><script type="text/javascript" charset="utf-8" src="~/lib/ueditor/ueditor.all.min.js"> </script><script type="text/javascript" charset="utf-8" src="~/lib/ueditor/lang/zh-cn/zh-cn.js"></script>

0x03 扩展action

UEditor前端和后端交互主要通过在url中给出不同的action参数实现的,例如/api/UEditor?action=config会从服务端获取UEditor配置信息。UEditorNetCore目前支持的有8种action:

config 获取服务端配置信息
uploadimage 上传图片
uploadscrawl 上传涂鸦
uploadvideo 上传视频
uploadfile 上传文件
listimage 多图片上传
listfile 多文件上传
catchimage 抓取图片

如果以上action无法满足需求,可以方便的增加、覆盖、移除action。

增加action

public void ConfigureServices(IServiceCollection services)
{services.AddUEditorService().Add("test", context =>{context.Response.WriteAsync("from test action");}).Add("test2", context =>{context.Response.WriteAsync("from test2 action");});services.AddMvc();
}

以上代码增加了名字为test和test2两个action,作为示例仅仅返回了字符串。当访问/api/UEditor?action=test时会返回"from test action"。在扩展action时可以使用Config获取服务端配置,也可以使用已有的Handlers,具体可以参考源代码。

覆盖现有action

上面的Add方法除了添加新action外还可以覆盖现有action。当现有的action可能不符合你的要求,可以Add一个同名的action覆盖现有的。

移除action

如果要移除某个action,可以使用Remove方法。

public void ConfigureServices(IServiceCollection services)
{services.AddUEditorService().Remove("uploadvideo");services.AddMvc();
}

以上代码中的Remove("uploadvideo")方法移除了名为uploadvideo的action。

0x04 相关资源

UEditorNetCore代码和示例:https://github.com/durow/UEditorNetCore
UEditor代码:https://github.com/fex-team/ueditor  
UEditor官网:http://ueditor.baidu.com/website/index.html  

原文地址:http://www.cnblogs.com/durow/p/6116393.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/327701.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php 编写线程教程,php 实现多线程

通过php的Socket方式实现php程序的多线程。php本身是不支持多线程的&#xff0c;那么如何在php中实现多线程呢&#xff1f;可以想一下&#xff0c;WEB服务器本身都是支持多线程的。每一个访问者&#xff0c;当访问WEB页面的时候&#xff0c;都将调用新的线程&#xff0c;通过这…

Vue的this

一、vue编译模块 &#xff08;1&#xff09;模块域中导出对象域 export default {data() {return {msg: };} }; A.function定义函数 I、模块导出对象的各关键字的属性值 如data的值 export default {props:[propA},data:function() {//经Vue转换&#xff0c;该函数属于Vu…

如何用TypeScript开发微信小程序

微信小程序来了&#xff01;这个号称干掉传统app的玩意儿虽然目前处于内测阶段&#xff0c;不过目前在应用号的官方文档里已经放出了没有内测号也能使用的模拟器了。 工具和文档可以参考官方文档&#xff1a;https://mp.weixin.qq.com/debug/wxadoc/dev/?t1477926804193 Type…

Axios实现异步通信

Axios异步通信(通信框架) <!--导入axios--> <script src"https://cdn.bootcdn.net/ajax/libs/axios/0.19.2/axios.min.js"></script>Axios是一个开源的可以用在浏览器端和NodeJS 的异步通信框架&#xff0c;她的主要作用就是实现AJAX异步通信&…

Java IO: InputStream

转载自 Java IO: InputStream译文链接 作者: Jakob Jenkov 译者: 李璟(jlee381344197gmail.com) InputStream类是Java IO API中所有输入流的基类。InputStream子类包括FileInputStream&#xff0c;BufferedInputStream&#xff0c;PushbackInputStream等等。参考Java IO概述这…

检查异常和非检查异常 有空你去学一下检查异常和非检查异常

https://blog.csdn.net/weixin_39220472/article/details/81056647 Java检查异常和非检查异常,运行时异常和非运行时异常的区别 灰太狼_cxh 2018-07-15 20:51:31 7131 收藏 17 展开 通常&#xff0c;Java的异常(包括Exception和Error)分为 检查异常&#xff08;checked exce…

php 向html追加元素,在PHP中存储兄弟元素的属性和内部HTML

我试图从HTML页面中搜索和存储值,所以我有一个简单的数组数组。它只有2个数组,每个数组有3个项目长。我是这样定义的;这些只是标题:$fileContents array(array(Date, Title, Link));HTML具有以下结构:06/08/2018My Title 这个结构重复几次。我只需要上面的第一个(最新的)。我可…

八幅漫画理解使用JSON Web Token设计单点登录系统

上次在《JSON Web Token - 在Web应用间安全地传递信息》中我提到了JSON Web Token可以用来设计单点登录系统。我尝试用八幅漫画先让大家理解如何设计正常的用户认证系统&#xff0c;然后再延伸到单点登录系统。 如果还没有阅读《JSON Web Token - 在Web应用间安全地传递信息》&…

Java IO: OutputStream

转载自 Java IO: OutputStream译文链接 作者: Jakob Jenkov 译者: 李璟(jlee381344197gmail.com) OutputStream类是Java IO API中所有输出流的基类。子类包括BufferedOutputStream&#xff0c;FileOutputStream等等。参考Java IO概述这一小节底部的表格&#xff0c;可以浏览…

pg和oracle比较,Oracle与PostgreSQL使用差异对比与总结

JDBC连接&#xff1a;Oracle的jdbc连接字符串&#xff1a;db.urljdbc:oracle:thin:192.168.1.1:1521:ORCLPostgresql的连接字符串&#xff1a;db.urljdbc:postgresql:192.168.1.1:5432/database1、基本数据类型差异OraclePostgreSQLVarchar2varcharnumbernumericdatetimestamp/…

hibernate+struts2整合jar包冲突

前几天&#xff0c;在用HibernateStruts2做项目的时候遇到了一个很棘手的问题&#xff0c;jar包冲突&#xff01;&#xff01;&#xff01;先亮一下错误&#xff1a; 之前还不知道这是个啥错误&#xff0c;经过上网查找之后才知道这是jar包冲突的问题&#xff01;&#xff01;由…

在ASP.NET Core中实现一个Token base的身份认证

以前在web端的身份认证都是基于Cookie | Session的身份认证, 在没有更多的终端出现之前&#xff0c;这样做也没有什么问题&#xff0c;但在Web API时代&#xff0c;你所需要面对的就不止是浏览器了&#xff0c;还有各种客户端&#xff0c;这样就有了一个问题&#xff0c;这些客…

Java IO: FileInputStream

转载自 Java IO: FileInputStream译文链接 作者: Jakob Jenkov 译者: 李璟(jlee381344197gmail.com) FileInputStream可以以字节流的形式读取文件内容。FileInputStream是InputStream的子类&#xff0c;这意味着你可以把FileInputStream当做InputStream使用(FileInputStream与…

Java获取指定月份的最后一天

https://blog.csdn.net/itmyhome1990/article/details/85619804 Java获取指定月份的最后一天 麦田 2019-01-02 17:43:38 8036 收藏 1 展开 import java.text.SimpleDateFormat; import java.util.Calendar; public class DUtil { public static String getLastDayOfMon…

php 运算器,运算器的功能是什么

运算器的功能是加、减、乘、除四则运算&#xff0c;与、或、非、异或等逻辑操作&#xff0c;以及移位、比较和传送等操作&#xff0c;运算器的处理对象是数据&#xff0c;所以数据长度和计算机数据表明方法&#xff0c;对运算器的性能影响极大。本文操作环境&#xff1a;Window…

同步外部接口数据的一些记录和分享

https://blog.csdn.net/jsnhux/article/details/80116921 https://blog.csdn.net/jsnhux/article/details/80116921 同步外部接口数据的一些记录和分享 灵葱 2018-04-28 10:03:49 2086 收藏 1 展开 1、spring boot之定时器任务 Component public class JobScheduler { pro…

.NET Standard 2.0:整齐划一的目标

在两个月前公布.NET Standard 2.0时&#xff0c;微软认为新版标准的目标在于为现有的三个主要.NET平台&#xff1a;.NET Framework、.NET Core&#xff0c;以及Xamarin提供一个坚实的底层基础&#xff0c;并为未来满足树莓派或IoT等全新类型设备需求可能需要创建的分支提供支持…

vue中路径带# vs 不带#

路由模式有两种 hash&#xff1a;路径带 # 符号&#xff0c;如 http://localhost/#/loginhistory&#xff1a;路径不带 # 符号&#xff0c;如 http://localhost/login 修改路由配置&#xff0c;代码如下&#xff1a; export default new Router({mode: history,routes: [] }…

centos7离线安装oracle11g,CentOS 7.5离线安装Oracle 11gR2

操作系统&#xff1a;CentOS 7.5 64bit&#xff0c;安装方式为gnome Desktop&#xff0c;附加系统工具以及兼容X Window安装包Oracle版本&#xff1a;11gR2Oracle11gR2官方文档链接安装系统建立默认用户的时候建立非oracle的账号。由于是离线安装&#xff0c;使用ssh登录&#…