Ckeditor 中粘贴图片

Posted mouseleo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ckeditor 中粘贴图片相关的知识,希望对你有一定的参考价值。

我们在ckeditor 中有上传图片,但是实际使用中这种手动上传图片方式并不是很方便,而是复制或者截图粘贴图片。 
这里我们实现主要是获取对应的粘贴事件。

CKEDITOR.instances["editor1"].on(‘instanceReady‘, function(e) {
    this.document.on("paste", function(e) {
        var items = e.data.$.clipboardData.items;
        for(var i = 0; i < items.length; ++i) {
            var item = items[i];
            if(item.kind == ‘file‘ && item.type == ‘image/png‘) {
                var imgFile = item.getAsFile();
                if(!imgFile) {
                    return true;
                }
                var reader = new FileReader();
                reader.readAsDataURL(imgFile);
                reader.onload = function(e) {
                    //显示文件  
                    CKEDITOR.instances["editor1"].inserthtml(‘<img src="‘ + this.result + ‘"  />‘);
                }
                return false;
            }
        }
    });
});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

这里先把对应事件处理,把粘贴进来的图片处理为base64 格式。(这里我们可以直接再这里上传后再进行标签插入,因为上传图片肯定有一点时间,这里为了界面流畅,可以不在这里处理) 
这样我们粘贴就可以出现图片了。但是我们要进行图片上传或者什么图片,同时还有在QQ 聊天窗口里面直接右键复制这样的图片粘贴是无法显示的。这样html 源码直接有个img 标签 标签的src 属性是

file:///d:/.../.../test.png
  • 1

类似于这样的,但是浏览器都是无法对这类似的路径都无法处理,所有这样我们就只用过滤掉这样的图片。

如果要想复制qq聊天窗口中的图片,可以先将图片双击最大化后右键复制就可以了。

我们想给对应图片进行上传或者其他处理

CKEDITOR.instances["editor1"].on(‘instanceReady‘, function(e) {
    this.on("change", function(e) {
        var doc = e.editor.document;
        var img = doc.find("img");
        var count = img.count();
        for(var i = 0; i < count; i++) {
            var item = img.getItem(i).$;
            var src = $(item).attr("src");
            if(src.startsWith("file:///")) {
                layer.msg("不支持该类型的图片");
                $(item).remove();
                return true;
            }
            if(src.startsWith("data:image")) {
                // 处理上传图片
            }
        }
        // 处理空标签
        var p = doc.find("p");
        count = p.count();
        for(var i = 0; i < count; i++) {
            var item = p.getItem(i).$;
            var text = $(item).html();
            if(text == "<!--{cke_protected}{C}%3C!%2D%2DStartFragment%20%2D%2D%3E-->") {
                $(item).remove();
                return true;
            }
        }
    });
});
  • 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

上面对应处理空标签,是处理粘贴qq 聊天窗口中图片复制过来会自动生成对应一串注释,这个可能是qq 产生的信息,为空整洁我们还是remove 掉。 
这里其实我们也不可以不对图片进行base64 转实际文件处理,直接存储base64在html 中,但是这个还是不建议这样操作。 
再操作bae64 我们可以在上面方法里面分别处理。我还可以在将整个文档提交到服务器后进行img 标签解析判断是否为base64 然后在处理为实际图片 
这个方法兼容

以上是关于Ckeditor 中粘贴图片的主要内容,如果未能解决你的问题,请参考以下文章

ckeditor JS插件 在火狐下直接复制图片 就可以粘贴到文本框里 如何取消这个复制粘贴功能 ?在线等

CKEditor 4.6 粘贴图片 转换为Base64

ckeditor 粘贴 有图片 不显示

CKEditor粘贴图片上传功能

在jsp中使用ckeditor时无法显示从word中粘贴过来的图片,

ckeditor 实现ctrl+v粘贴图片并上传word粘贴带图片