应无所住,而生其心
排名
1
文章
860
粉丝
112
评论
163
net core webapi post传递参数
庸人 : 确实坑哈,我也是下班好了好几次,发现后台传递对象是可以的,但...
百度编辑器自定义模板
庸人 : 我建议换个编辑器,因为现在百度富文本已经停止维护了,用tinymec...
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

editormd,Markdown编辑器Editor.md图片粘贴插入插件的开发

5361人阅读 2018/12/23 17:21 总访问:5182813 评论:0 收藏:0 手机
分类: 前端

Markdown编辑器Editor.md图片粘贴插入的开发。最近发现编辑器图片上传很不方便,不能像其他编辑器一样粘贴插入图片,就着手为自己的编辑器加了这个功能,在这里分享给有需要的朋友。
*此文章代码仅供参考。用于开发环境时可根据自己需要进行修改。

插件使用方法:使用截图工具截图保存之后,在编辑器里面粘贴/(ctrl+v)就可以实现自动上传图片了。

1.创建插件文件

在plugins目录下创建 image-handle-paste/image-handle-paste.js文件。

2.插件的内容

这个方法里面是将粘贴板的图片添加到一个FormData里面,然后使用ajax进行提交上传的,上传完成调编辑器自带的图片dialog进行插入。里面预留了blob对象和base64格式的图片方法,根据自己需求自取。

  1. /*!
  2. * editormd图片粘贴上传插件
  3. *
  4. * @file image-handle-paste.js
  5. * @author codehui
  6. * @date 2018-11-07
  7. * @link https://www.codehui.net
  8. */
  9. (function() {
  10. var factory = function (exports) {
  11. var $ = jQuery; // if using module loader(Require.js/Sea.js).
  12. var pluginName = "image-handle-paste"; // 定义插件名称
  13. //图片粘贴上传方法
  14. exports.fn.imagePaste = function() {
  15. var _this = this;
  16. var cm = _this.cm;
  17. var settings = _this.settings;
  18. var editor = _this.editor;
  19. var classPrefix = _this.classPrefix;
  20. var id = _this.id;
  21. if(!settings.imageUpload || !settings.imageUploadURL){
  22. console.log('你还未开启图片上传或者没有配置上传地址');
  23. return false;
  24. }
  25. //监听粘贴板事件
  26. $('#' + id).on('paste', function (e) {
  27. var items = (e.clipboardData || e.originalEvent.clipboardData).items;
  28. //判断图片类型
  29. if (items && items[0].type.indexOf('image') > -1) {
  30. var file = items[0].getAsFile();
  31. /*生成blob
  32. var blobImg = URL.createObjectURL(file);
  33. */
  34. /*base64
  35. var reader = new FileReader();
  36. reader.readAsDataURL(file);
  37. reader.onload = function (e) {
  38. var base64Img = e.target.result //图片的base64
  39. }
  40. */
  41. // 创建FormData对象进行ajax上传
  42. var forms = new FormData(document.forms[0]); //Filename
  43. forms.append(classPrefix + "image-file", file, "file_"+Date.parse(new Date())+".png"); // 文件
  44. _this.executePlugin("imageDialog", "image-dialog/image-dialog");
  45. _ajax(settings.imageUploadURL, forms, function(ret){
  46. if(ret.success == 1){
  47. $("." + classPrefix + "image-dialog").find("input[data-url]").val(ret.url);
  48. //cm.replaceSelection("![](" + ret.url + ")");
  49. }
  50. console.log(ret.message);
  51. })
  52. }
  53. })
  54. };
  55. // ajax上传图片 可自行处理
  56. var _ajax = function(url, data, callback) {
  57. $.ajax({
  58. "type": 'post',
  59. "cache": false,
  60. "url": url,
  61. "data": data,
  62. "dateType": "json",
  63. "processData": false,
  64. "contentType": false,
  65. "mimeType": "multipart/form-data",
  66. success: function(ret){
  67. callback(JSON.parse(ret));
  68. },
  69. error: function (err){
  70. console.log('请求失败')
  71. }
  72. })
  73. }
  74. };
  75. // CommonJS/Node.js
  76. if (typeof require === "function" && typeof exports === "object" && typeof module === "object")
  77. {
  78. module.exports = factory;
  79. }
  80. else if (typeof define === "function") // AMD/CMD/Sea.js
  81. {
  82. if (define.amd) { // for Require.js
  83. define(["editormd"], function(editormd) {
  84. factory(editormd);
  85. });
  86. } else { // for Sea.js
  87. define(function(require) {
  88. var editormd = require("./../../editormd");
  89. factory(editormd);
  90. });
  91. }
  92. }
  93. else
  94. {
  95. factory(window.editormd);
  96. }
  97. })();

后端接收file方法为$_FILES[‘editormd-image-file’]

默认返回数据格式(修改_ajax方法回调即可)

  1. {
  2. success : 0 | 1, // 0 表示上传失败,1 表示上传成功
  3. message : "提示的信息,上传成功或上传失败及错误信息等。",
  4. url : "图片地址" // 上传成功时才返回
  5. }

3.页面引用插件

  1. <!DOCTYPE html>
  2. <html lang="zh">
  3. <head>
  4. <meta charset="utf-8" />
  5. <title>editormd图片粘贴上传插件</title>
  6. <link rel="stylesheet" href="../css/editormd.css" />
  7. </head>
  8. <body>
  9. <div id="test-editormd">
  10. <textarea style="display:none;"></textarea>
  11. </div>
  12. <script src="js/jquery.min.js"></script>
  13. <script src="../editormd.js"></script>
  14. <script type="text/javascript">
  15. var testEditor = editormd("test-editormd", {
  16. path: '../lib/',
  17. imageUpload: true, //开启图片上传
  18. imageUploadURL: '/logic/upload', //图片上传后台地址
  19. onload: function() {
  20. // 引入插件 执行监听方法
  21. editormd.loadPlugin("../plugins/image-handle-paste/image-handle-paste", function(){
  22. testEditor.imagePaste();
  23. });
  24. }
  25. });
  26. </script>
  27. </body>
  28. </html>

4.插件的引用方法

插件引用有三种方法都可以用。

第一种

editormd.loadPlugin(‘插件文件路径’,’回调函数’)

  1. editormd.loadPlugin("../plugins/image-handle-paste/image-handle-paste", function(){
  2. testEditor.imagePaste();
  3. });

第二种:

  1. //引入插件
  2. <script src="../plugins/image-handle-paste/image-handle-paste.js"></script>
  3. //使用
  4. testEditor.imagePaste();

第三种:
editormd.loadPlugin(“要执行的插件方法名”,插件地址)

  1. this.executePlugin("imagePaste", "image-handle-paste/image-handle-paste");

原文地址:https://www.codehui.net/info/39.html


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)

评价

百度编辑器本地缓存

百度编辑器默认有本地缓存。存储在localstorage中。可以防止用户在写文章的时候意外关闭后不至于之前写的内容会丢失读取本...

百度编辑器添加事件

添加点击与失去焦点事件://添加点击事件 ue.addListener(&quot;click&quot;,function(){ alert(&quot;点击&quot;); }) ...

百度编辑器图片上传

先在百度编辑器配置好上传图片的后台地址serverUrl:&#39;图片上传的后台地址&#39;varue=UE.getEditor(&quot;container&quot...

评价上编辑器之坑

想给评论功能加上表情,传图片,贴代码等功能。所以就要把textarea换成一个编辑器。以为很简单的就是把textarea替换一下就...

百度编辑器实现自己的全屏逻辑

首先监听百度编辑器的全屏事件ue.addListener(&#39;beforefullscreenchange&#39;,function(event,isFullScreen){ if(isFul...

百度编辑器在layer弹窗中加载问题

因为加载到layer后百度编辑器要从新渲染一遍,所以如果使用setContent(Content)设置的内容在加载到layer弹窗中是显示不出来...

.NET MVC 使用百度编辑器详细教程:(1)配置编辑器

一、什么是百度编辑器百度编辑器UEditor是由百度web前端研发部开发一款应用于网站的编辑器,具有轻量,可定制,注重用户体...

百度编辑器自定义模板

前言:有些时候我们想要一些固定格式的模板,然后在这个模板的基础上去进行编写可以提升我们的效率,就像微信发布图文消息...

去掉百度编辑器div被替换成p标签

百度编辑器默认会把div替换成p标签,这样我们在编写一些自定义模板的时候就会改变我们的结构,造成一些问题。解决方法:在u...

如何完全干净的卸载 vs code编辑器

微软官方推出的免费的编辑器:vs code这个编辑器是目前我使用过的最好用的编辑器,软件的【轻量化,以及软件的可扩展性能都非...

百度编辑器模板消息

&lt;!DOCTYPEHTML&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;&lt;/title&gt; &lt;metahttp-equiv=&quot;Content-Typ...

.net core百度编辑器上传图片配置

.net core百度编辑器上传图片配置和.net framework还是有一点点区别publicActionResultUploadImage(List&lt;IFormFile&gt;f...

百度编辑器toolbars

toolbars: [ [ &#39;anchor&#39;, //锚点 &#39;undo&#39;, //撤销 &#39;redo&#39;, //重做 &#39;bold&#39;, //加粗 &#39;in...

使用markdown编辑器Editormd图片上传

静态资源路径问题可以参考:https://www.tnblog.net/aojiancc2/article/details/3436自定义工具栏可以参考:https://www.tn...

百度编辑器敲回车会出现一个p标签

默认是这样的,这个有时候也会影响我们自定义的效果,这个时候我们可以在ueditor.all.js中去修改一下这个逻辑,把回车就添...