ckeditor 粘贴图片,粘贴截图

简介: 我们在ckeditor 中有上传图片,但是实际使用中这种手动上传图片方式并不是很方便,而是复制或者截图粘贴图片。 这里我们实现主要是获取对应的粘贴事件。CKEDITOR.instances["editor1"].on('instanceReady', function(e) { this.document.on("paste", function(e) {

我们在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 + '" alt="" />');
                }
                return false;
            }
        }
    });
});

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

file:///d:/.../.../test.png

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

如果要想复制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;
            }
        }
    });
});

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

相关文章
|
缓存 JavaScript
运行vue报错npm ERR! A complete log of this run can be found in解决办法
在这里我们需要清除npm的缓存: (1)在cmd命令行窗口中输入:npm cache clean --force (2)然后再运行我们需要安装模块的命令,输入npm install。 有时是网络问题,依赖包加载不完整,删掉node_modules文件后,重新执行npm install即可。
2748 0
|
uml
Confluence插件推荐
Confluence插件推荐
1791 0
|
前端开发
`Promise.allSettled()`方法与`Promise.all()`方法有何不同?
`Promise.allSettled()` 提供了一种更灵活和全面的方式来处理多个 `Promise`,使得我们能够更好地应对各种异步操作的情况,尤其是需要详细了解每个 `Promise` 结果的场景。
|
5月前
|
JSON 前端开发 安全
前端开发中常用的鉴权方式解析与实践要点
本文深入探讨了前端开发中常用的鉴权方式,包括HTTP基本鉴权、Session-Cookie鉴权、Token验证、JWT(JSON Web Tokens)、单点登录(SSO)和OAuth等。文章首先明确了认证、授权、鉴权和权限控制的概念及关系,随后详细解析每种鉴权方式的工作原理、优缺点及适用场景。例如,HTTP基本鉴权简单但安全性低,适合内部网络;Session-Cookie鉴权易受CSRF攻击,适用于同域Web应用;Token和JWT无状态且扩展性好,适合分布式系统;SSO提升用户体验,适用于多系统统一登录;OAuth安全方便,适合第三方授权接入。
405 2
|
自然语言处理 Java 关系型数据库
ElasticSearch 实现分词全文检索 - 聚合查询 cardinality
ElasticSearch 实现分词全文检索 - 聚合查询 cardinality
411 1
org.activiti.engine.ActivitiException: Couldn't deserialize object in variable 'application'
org.activiti.engine.ActivitiException: Couldn't deserialize object in variable 'application'
|
安全 Java 数据安全/隐私保护
Spring 安全配置中拦截 URL 的顺序重要性
【8月更文挑战第21天】
223 1
|
Python
PyQt中资源文件的使用(详细步骤介绍)
PyQt中资源文件的使用(详细步骤介绍)
662 1
|
Kubernetes Java jenkins
SpringCloud微服务实战——搭建企业级开发框架(三十五):SpringCloud + Docker + k8s实现微服务集群打包部署-集群环境部署【下】
• sonarqube默认用户名密码: admin/admin • 卸载命令:docker-compose -f jenkins-compose.yml down -v 六、Jenkins自动打包部署配置   项目部署有多种方式,从最原始的可运行jar包直接部署到JDK环境下运行,到将可运行的jar包放到docker容器中运行,再到现在比较流行的把可运行的jar包和docker放到k8s的pod环境中运行。每一种新的部署方式都是对原有部署方式的改进和优化,这里不着重介绍每种方式的优缺点,只简单说明一下使用Kubernetes 的原因:Kubernetes 主要提供弹性伸缩、服务发现、自我修复,
936 57
SpringCloud微服务实战——搭建企业级开发框架(三十五):SpringCloud + Docker + k8s实现微服务集群打包部署-集群环境部署【下】
|
移动开发 JavaScript
h5 实现调用系统拍照或者选择照片并预览
调用手机相机拍照或者是调用手机相册选择照片,这个功能在 手机端页面 或者 webApp 应该是常用到的,就拿个人或会员资料录入那块来说就已经是经常会碰到的, 每当看到这块功能的时候,前端的小伙伴就得去找各种各样的插件。
3303 0