CKEditor与dotnetcore实现图片上传功能

发布时间 - 2026-01-11 03:26:10    点击率:

本文实例为大家分享了CKEditor与dotnetcore实现图片上传的具体代码,供大家参考,具体内容如下

CKEditor的使用

1.引入js库

<script src="https://cdn.ckeditor.com/4.6.1/standard-all/ckeditor.js"></script> 

2.定义一个textarea标签

<textarea id="editor">
 </textarea> 

3.用CkEditor替换textarea即可使用基本功能

CKEDITOR.replace('editor'); 

4.配置CkEditor

添加图片上传,代码插入工具

CKEDITOR.replace('editor-box', {
   //GitHub地址:https://github.com/ckeditor   
   toolbar: [
    { name: 'document', items: ['Source'] },
    { name: 'basicstyles', items: ['Bold', 'Italic'] },
    { name: 'paragraph', items: ['NumberedList', 'BulletedList', '-', 'Outdent', 'Indent', '-', 'Blockquote'] },
    { name: 'links', items: ['Link', 'Unlink'] },
    { name: 'insert', items: ['Image','CodeSnippet'] },
    { name: 'styles', items: ['Format', 'Styles'] }
   ],
   filebrowserImageUploadUrl: '/Blogs/UploadImageUrl', //配置图片上传后台Url   
   customConfig: '',   
   extraPlugins: 'codesnippet,image2,uploadimage',   
   removePlugins: 'image',   
   //mathJaxLib: 'https://cdn.mathjax.org/mathjax/2.6-latest/MathJax.js?config=TeX-AMS_HTML',  
   codeSnippet_theme: 'ir_black',
   height: 450,   
   contentsCss: ['https://cdn.ckeditor.com/4.6.1/standard-all/contents.css'],   
   format_tags: 'p;h1;h2;h3;pre',   
   removeDialogTabs: 'image:advanced;link:advanced;link:target',  
   stylesSet: [
    /* Inline Styles */
    { name: 'Marker', element: 'span', attributes: { 'class': 'marker' } },
    { name: 'Cited Work', element: 'cite' },
    { name: 'Inline Quotation', element: 'q' },
    /* Object Styles */
    {
     name: 'Special Container',
     element: 'div',
     styles: {
      padding: '5px 10px',
      background: '#eee',
      border: '1px solid #ccc'
     }
    },
    {
     name: 'Compact table',
     element: 'table',
     attributes: {
      cellpadding: '5',
      cellspacing: '0',
      border: '1',
      bordercolor: '#ccc'
     },
     styles: {
      'border-collapse': 'collapse'
     }
    },
    { name: 'Borderless Table', element: 'table', styles: { 'border-style': 'hidden', 'background-color': '#E6E6FA' } },
    { name: 'Square Bulleted List', element: 'ul', styles: { 'list-style-type': 'square' } },
    /* Widget Styles */
    { name: 'Illustration', type: 'widget', widget: 'image', attributes: { 'class': 'image-illustration' } },
    { name: 'Featured snippet', type: 'widget', widget: 'codeSnippet', attributes: { 'class': 'code-featured' } },
    { name: 'Featured formula', type: 'widget', widget: 'mathjax', attributes: { 'class': 'math-featured' } }
   ]
  });

5.后台接收图片

/// <summary>
  /// 图片上传
  /// </summary>
  /// <param name="env"></param>
  /// <returns></returns>
  public async Task<IActionResult> UploadImageUrl([FromServices]IHostingEnvironment env)
  {
   // CKEditor提交的很重要的一个参数 
   string callback = Request.Query["CKEditorFuncNum"];
   var form = Request.Form;
   var img = form.Files[0]; //获取图片
   string fileName = img.FileName;
   var openReadStream = img.OpenReadStream();
   byte[] buff = new byte[openReadStream.Length];
   await openReadStream.ReadAsync(buff, 0, buff.Length);
   string filenameGuid = Guid.NewGuid().ToString();
   var bowerPath = PathUtils.GetSavePath(filenameGuid, true) + ".jpg";//获取到图片保存的路径,这边根据自己的实现
   var savePath = Path.Combine(env.WebRootPath, bowerPath);
   using (FileStream fs = new FileStream(savePath, FileMode.Create))
   {
    await fs.WriteAsync(buff, 0, buff.Length);
    //服务器返回JavaScript脚本
    string result = $"<script type=\"text/javascript\">window.parent.CKEDITOR.tools.callFunction(\"{callback}\", \"{"/"+bowerPath}\", \"\");</script>";
    Response.ContentType = "text/html;charset=UTF-8";
    return Content(result);
   }
  }
 

6.注意

服务器返回需要加上这个,否则会遇到前端页面不执行返回的JavaScript脚本的问题

Response.ContentType = "text/html;charset=UTF-8";

配置完成即可使用图片上传功能

 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# CKEditor  # dotnetcore  # 图片上传  # .Net Core自动化部署之利用docker版jenkins部署dotnetcore应用的方法  # DotNetCore深入了解之HttpClientFactory类详解  # 自己的  # 很重要  # 大家分享  # 则会  # 具体内容  # 大家多多  # latest  # MathJax  # org 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: PHP正则匹配日期和时间(时间戳转换)的实例代码  Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】  Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优  Laravel集合Collection怎么用_Laravel集合常用函数详解  如何用虚拟主机快速搭建网站?详细步骤解析  Laravel如何使用.env文件管理环境变量?(最佳实践)  昵图网官方站入口 昵图网素材图库官网入口  Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程  Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  MySQL查询结果复制到新表的方法(更新、插入)  通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】  北京专业网站制作设计师招聘,北京白云观官方网站?  JS去除重复并统计数量的实现方法  浅谈javascript alert和confirm的美化  如何快速辨别茅台真假?关键步骤解析  Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程  Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧  Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧  简单实现jsp分页  ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集  Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  Laravel如何实现API版本控制_Laravel版本化API设计方案  Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】  详解Oracle修改字段类型方法总结  Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】  什么是javascript作用域_全局和局部作用域有什么区别?  如何在云虚拟主机上快速搭建个人网站?  Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全  Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】  详解Android——蓝牙技术 带你实现终端间数据传输  JavaScript如何实现倒计时_时间函数如何精确控制  如何用PHP工具快速搭建高效网站?  WordPress 子目录安装中正确处理脚本路径的完整指南  JavaScript中如何操作剪贴板_ClipboardAPI怎么用  如何用搬瓦工VPS快速搭建个人网站?  谷歌Google入口永久地址_Google搜索引擎官网首页永久入口  香港服务器租用费用高吗?如何避免常见误区?  高防服务器:AI智能防御DDoS攻击与数据安全保障  如何登录建站主机?访问步骤全解析  Internet Explorer官网直接进入 IE浏览器在线体验版网址  深圳网站制作培训,深圳哪些招聘网站比较好?  bing浏览器学术搜索入口_bing学术文献检索地址  如何在阿里云香港服务器快速搭建网站?  大连 网站制作,大连天途有线官网?