asp.net core集成CKEditor实现图片上传功能

背景

本文为大家分享了asp.net core 如何集成CKEditor ,并实现图片上传功能的具体方法,供大家参考,具体内容如下。

准备工作

1.visual studio 2019 开发环境

2.net core 2.0 及以上版本

实现方法

1、新建asp.net core web项目

2、下载CKEditor

这里我们新建了一个系统自带的样本项目,去 CKEditor官网下载一个版本,解压后拷贝大wwwroot中

3、增加图片上传控制器

@using CompanyName.ProjectName.Web.Host.Web.Model
@model demock
@{ViewData["title"] = "富文本框";Layout = "_SimpleTable";
}
@p headers{@*<style>.nav.nav-tabs.padding-18 {padding-left: 18px;}.nav-tabs {border-color: #c5d0dc;margin-bottom: 0 !important;margin-left: 0;position: relative;top: 1px;}
</style>*@
}<p class="content"><div class="box box-primary"><div class="box-header with-border"><ul class="nav nav-tabs padding-18"><li><a href="/demo/sendmail"><i class="orange ace-icon fa fa-cog bigger-120"></i>发邮件</a></li><li class="active"><a href="javascript:void(0);"><i class="green ace-icon fa fa-home bigger-120"></i>富文本编辑框</a></li></ul></div><!-- /.box-header --><!-- form start --><form role="form" id="form1"><div class="box-body"><div class="callout callout-success"><h4>富文本编辑器</h4><p></p></div><table class="form"><tr><th class="formTitle">内容</th><td class="formValue">@Html.EditorFor(model => model.rules)@*<textarea class="form-control" name="Text" id="Text" style="height: 70px;" placeholder=""></textarea>*@</td></tr></table></div><!-- /.box-body --><div class="box-footer"><button type="button" id="btnSave" class="btn btn-success">保存</button></div></form></div><!-- /.tab-content -->
</p>@p scripts{<script src="~/ckeditor/ckeditor.js"></script><script src="~/js/jquery.base64.js"></script><script type="text/javascript">//editor.document.getBody().getText(); //取得纯文本//editor.document.getBody().getHtml(); //取得html文本//var editor = CKEDITOR.replace('Text',//{//    toolbar: "Full",//    filebrowserUploadUrl: "/Image/ckupload?type=File",  //开启文件上传(此项会同时开启图片和FLASH上传)//    filebrowserImageUploadUrl: "/Image/ckupload?type=Images",  // 开启图片上传//    filebrowserFlashUploadUrl: "/Image/ckupload?type=Flash"  //开启FLASH上传//});$.base64.utf8encode = true;var editor2 = CKEDITOR.replace('rules',{toolbar: "Full",filebrowserUploadUrl: "/Image/ckupload?type=File",  //开启文件上传(此项会同时开启图片和FLASH上传)filebrowserImageUploadUrl: "/Image/ckupload?type=Images",  // 开启图片上传filebrowserFlashUploadUrl: "/Image/ckupload?type=Flash"  //开启FLASH上传});$(function () {editor2.setData("@(Html.Raw(Model.rules))");});$("#btnSave").click(function (ev) {var a = editor2.document.getBody().getHtml();$("#rules").val( $.base64.btoa(a) );var $form = $("#form1");editor2.setData(a);$.ajax({url: "/demo/ck/",data: $form.serialize(),type: "POST",cache: false,async: false,beforeSend: function () {$("#btnSave").attr("disabled", "disabled");},success: function (r) {//  if (r.isSucceeded == true) {// location.href = r.goBackUrl;// "/Employee/index?ram=" + Math.random();// r.GoBackUrl;// }//  else  // 其他问题//   {alert( $.base64.atob(r.message, true));//    }$("#btnSave").removeAttr("disabled");},error: function () {alert("保存失败");$("#btnSave").removeAttr("disabled");}});//   alert(editor2.document.getBody().getHtml());// return;//$.post("/demo/ck/",//    {//        Text: editor2.document.getBody().getHtml(),//    },//    function (data, status) {//          alert("Data: " + data + "\nStatus: " + status);//    });});
</script>}
/// <summary>/// 富文本框  上传图片/// </summary>/// <returns></returns>[HttpPost][IgnoreAuthorize]public IActionResult Ckupload(){uploadfile user = new uploadfile();var files = Request.Form.Files;if (files == null || files.Count == 0)ViewBag.cc = "no file";user.ShareImg = files[0];var contentRoot = Directory.GetCurrentDirectory();var webRoot = Path.Combine(contentRoot, "wwwroot");var parsedContentDisposition = ContentDispositionHeaderValue.Parse(user.ShareImg.ContentDisposition);var originalName = parsedContentDisposition.FileName.ToString().Replace("\"", "");var ext = Path.GetExtension(Path.Combine(webRoot, originalName));//   if (ext != ".jpg")//   return Json(new { jsonrpc = "2.0", error = new { code = 101, message = "文件格式错误" }, id = "id" });string gid = Guid.NewGuid().ToString();var fileName = Path.Combine("upload", gid + ext);var fileName2 = "upload/" + gid + ext;using (var stream = new FileStream(Path.Combine(webRoot, fileName), FileMode.CreateNew)){user.ShareImg.CopyTo(stream);}string output = @"<script type=""text/javascript"">window.parent.CKEDITOR.tools.callFunction({0} ,'{1}');</script>";string url = "http://" + Request.Host.Value;output = string.Format(output, Request.Query["CKEditorFuncNum"], url + "/" + fileName2);ViewBag.cc = output;return View();}

4、增加图片上传控制器注意返回是一个json对象,因此建了一个

      简单的对象返回。

运行效果

源码地址

https://gitee.com/conanOpenSource_admin/CompanyName.ProjectName

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

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

相关文章

ValidationSummary 控件

真是有些郁闷到现在这个控件还一直没有用过.. 直到今天才发现.可以解决错误信息提示排版上的问题. 单独用RequiredFieldValidator 我以前一直没有设Text属性.结果一错误就是errormessage这边就出来了设了text后就不会显示errormessage 而显示Text了这个时候如果有ValidationSum…

java static new_java静态类new的对象是否能被回收?

问题来自一个线上GC频繁的应用&#xff0c;观察到老年代一直gc下不去导致应用被gc STW卡主假死&#xff0c;检查代码发现这样一段代码&#xff0c;感觉可疑代码如下&#xff1a;public class WriteEsWork {public static void write(List<EsIndexInfo> esList, String in…

看了一天小说

在公司呆了一天什么都没干&#xff0c;看了一天小说。都不知道自己啥时候变得这么堕落的&#xff0c;不过还好&#xff0c;至少小说是我喜欢看的那种&#xff0c;很热血的小说。不会有主管看到我的Blog吧&#xff0c; 明天要干点正事了&#xff0c;还是得跟自己说一下&#xff…

Blazor VS React / Angular / Vue.js

原文作者: Christian Findlay原文链接&#xff1a;https://christianfindlay.com/2020/06/04/blazor-vs-react-angular-vue-js/Blazor是一项新的Microsoft技术&#xff0c;允许开发人员使用C&#xff03;为浏览器编写代码, 本文将Blazor与其他三个常见SPA框架进行了比较&#x…

c语言的使用比例远远高于python语言对吗_Python和C语言的语法有什么不同?

随着经济发发展&#xff0c;互联网精英的缺乏越来越严重了&#xff0c;尤其是编程工程师&#xff0c;市场缺乏率极高&#xff0c;所有对于准备即将学习编程朋友&#xff0c;是一个非常的好时机Python和C语言的语法有什么不同&#xff1f;python与C的区别如下&#xff1a;1、语言…

ASP.NET 應用程式的安全性模型

本單元內容 功能 ASP.NET 應用程式依賴於許多不同元素及技術的成功交互操作。每個方案元件都提供安全性功能&#xff0c;以滿足其自身的需求。然而&#xff0c;純粹從個別元件的角度考量安全性還不夠。若要提供整體方案的安全性&#xff0c;您還必須考量元件如何彼此互動。 本單…

.NET开源5年了,这些宝藏你还没get?

从2016年微软发布.NET Core1.0&#xff0c;至今.NET开源也快5年了&#xff0c;GitHub也涌现了很多优秀的开源项目&#xff0c;关于CLR层面调优的讨论也多了起来&#xff0c;尤其是龙芯.NET开源的CLR迁移项目&#xff0c;更是让.NET进入一个全新的时代。鲁迅说过&#xff1a;菜鸟…

java socket send_java socket编程

TcpServerServer端所要做的事情主要是建立一个通信的端点&#xff0c;然后等待客户端发送的请求。典型的处理步骤如下&#xff1a;1. 构建一个ServerSocket实例&#xff0c;指定本地的端口。这个socket就是用来监听指定端口的连接请求的。2. 调用socket的accept()方法来获得下面…

C#来创建和读取XML文档 [转]

C&#xff03;来创建和读取XML文档【关键词】&#xff1a;XML 录入&#xff1a;小鱼之家 来源&#xff1a;http://fisher.xundain.com 时间&#xff1a;2005-3-3 23:41:54 点击&#xff1a;85次 扩展标记语言XML&#xff08;eXtensible Markup Language&#xff09;&#xff0…

如何成功搞垮一个团队?

阅读本文大概需要3分钟。最近好几个读者聊到是否能写一些怎么带团队的文章&#xff0c;在互联网职场中&#xff0c;升职带团队被大部分职场人视为职业生涯的重大转折点。一方面&#xff0c;升职意味着更丰厚的待遇&#xff0c;另一方面&#xff0c;带团队意味着自己大小变成了一…

Python学习第一天

干程序这行比较辛苦的就是要随时更新自己的知识。闷&#xff5e;&#xff5e;为了让自己能够更加深入的学习GUN和LINUX。在简单了解了shell以后决定学习Python。&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d…

WinForm捕获全局异常(捕获未处理的异常)

背景我们在做WinForm程序的时候&#xff0c;一般都是对异常进行处理&#xff0c;但是&#xff0c;我们要防止不小心出现未知异常&#xff0c;导致软件崩溃。也可采集系统未知的异常信息&#xff0c;防止出现异常&#xff0c;也无法下手。于是就有了如这篇文章标题所述的一个简单…

it's so cold

今晚值日&#xff0c;本来中午不冷的&#xff0c;就换了衬衫&#xff0c;结果傍晚的时候就很凉&#xff0c;吃过晚饭只好回去换了件秋天的棉衫。但晚上我值日的那个地方风很大&#xff0c;熬了一节课&#xff0c;下课学生来打乒乓&#xff0c;借了件他们的校服穿&#xff0c;结…

java 继承 冒号_java继承(extends)简单介绍

继承相信很多人都有听说过&#xff0c;继承是面向对象的三个基本特征之一&#xff0c;下面的话就一起通过简单的文章来对java继承进行一下了解吧。继承和现实生活中的“继承”的相似之处是保留一些父辈的特性&#xff0c;从而减少代码冗余&#xff0c;提高程序运行效率。Java中…

如何在 ASP.NET Core 中写出更干净的 Controller

你可以遵循一些最佳实践来写出更干净的 Controller&#xff0c;一般我们称这种方法写出来的 Controller 为瘦Controller&#xff0c;瘦 Controller 的好处在于拥有更少的代码&#xff0c;更加单一的职责&#xff0c;也便于阅读和维护&#xff0c;而且随着时间的推移也容易做 Co…

探索 .NET团队对API的设计流程

原文作者&#xff1a;steve gordon 原文链接: https://www.stevejgordon.co.uk/how-are-dotnet-apis-designed在这篇文章中&#xff0c;我想介绍一些我觉得非常有趣的东西&#xff0c;.NET 团队是如何设计API的&#xff1f;我们先来看下.NET团队面临的有哪些挑战&#xff0c;您…

静态页面的值传递

1两窗口之间存在着关系.父窗口parent.htm打开子窗口son.htm子窗口可以通过window.opener指向父窗口.这样可以访问父窗口的对象. 优点:取值方便.只要window.opener指向父窗口,就可以访问所有对象. 不仅可以访问值,还可以访问父窗口的方法.值长度无限制.缺点:两窗口要存在着…

java类同步_Java中方法,对象,类的同步

关于在多线程环境中使用同步,我需要一些澄清.我在下面有一个小例子类.但我实际上发现很难做出以下内容如何工作的测试用例;我想要测试用例的原因是要了解同步如何处理这些不同的场景>如果一个线程调用SharedResource.staticMethod,它将获取该类的锁.它是否意味着一个SharedR…

ocelot 中间件的变化

ocelot 中间件的变化Intro之前我们使用 ocelot 的时候自定义了一些中间件来实现我们定制化的一些需求&#xff0c;最近博客园上有小伙伴问我怎么使用&#xff0c;他用的版本是 16.0 版本&#xff0c;16.0 和 17.0 版本的差异不是特别大&#xff0c;就以 17.0 版本为例看一下 oc…

mybatis mysql usegeneratedkeys_mybatis中useGeneratedKeys用法--插入数据库后获取主键值

前言&#xff1a;今天无意在mapper文件中看到useGeneratedKeys这个词&#xff0c;好奇就查了下&#xff0c;发现能解决我之前插入有外键表数据时&#xff0c;这个外键获取繁琐的问题&#xff0c;于是学习敲DEMO记录在项目中经常需要获取到插入数据的主键来保障后续操作&#xf…