Js实现粘贴上传图片的原理及示例

 更新时间:2020年12月09日 10:29:50   作者:袁志蒙  
这篇文章主要介绍了Js实现粘贴上传图片的原理及示例,帮助大家更好的理解和使用JavaScript,感兴趣的朋友可以了解下

我们或多或少都使用过各式各样的富文本编辑器,其中有一个很方便功能,复制一张图片然后粘贴进文本框,这张图片就被上传了,那么这个方便的功能是如何实现的呢?

原理分析:
复制=>粘贴=>上传

在这个操作过程中,我们需要做的就是:监听粘贴事件=>获取剪贴板里的内容=>发请求上传

需要明白的是:

我们只能上传截图工具截的图片(qq截图、微信截图等),不能粘贴上传系统里的图片(从桌面上、硬盘里复制),因为他们是存在完全不同的地方。

知悉paste event这个事件:当进行粘贴(右键paste/ctrl+v)操作时,该动作将触发名为'paste'的剪贴板事件,这个事件的触发是在剪贴板里的数据插入到目标元素之前。如果目标元素(光标所在位置)是可编辑的元素(设置了contenteditable属性的div。textarea并不行),粘贴动作将把剪贴板里的数据,以最合适的格式,插入到目标元素里;如果目标元素不可编辑,则不会插入数据,但依然触发paste event。数据在粘贴的过程中是只读的。

监听了paste事件,也知道了表现形式,接下来就是如何获取数据了:

chrome有特定的方法,利用clipboardData.items、getAsFile()、new FileReader()等api可以在paste回调函数里获取到剪贴板里图片的base64编码字符串(无论是截图粘贴的还是网页图片复制粘贴的),ie11,firefox没有这样的api,不过依然有办法可以获取,因为数据已经表现在img的src里了,对于截图粘贴的,直接取img的src属性值(base64),对于网页粘贴的,则把地址传给后台,然后根据地址down下来,存在自己的服务器,最后把新地址返回来交给前端展示就ok了。为了保持一致性便于管理,统一将所有情况(截图、网页)中的img的src属性替换为自己存储的地址。

完整例子:

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <title>Js实现粘贴上传图片</title>
    <script src="jquery.js"></script>
</head>

<body>
    复制粘贴上传图片:
    <div id="content_img" contentEditable="true" style="width:500px;height:500px;border:1px solid #000;"></div>
    <script>
        document.getElementById('content_img').addEventListener('paste', function(e) {
        if (!(e.clipboardData && e.clipboardData.items)) {
            return;
        }
        for (var i = 0, len = e.clipboardData.items.length; i < len; i++) {
            var item = e.clipboardData.items[i];
            if (item.kind === "string") {
                item.getAsString(function(str) {
                    console.log(str);
                    alert("请粘贴图片上传");
                })
                $("#content_img").html(""); 
            } else if (item.kind === "file") {
                var blob = item.getAsFile();
                console.log(blob);
                if (blob.size === 0) {
                    return;
                }
                var data = new FormData();
                data.append("image", blob);
                $.ajax({
                    url: "http://www.yzmcms.com/upload.php",
                    type: 'POST',
                    cache: false,
                    data: data,
                    processData: false,
                    contentType: false,
                    dataType: "json", 
                    success: function(result) {
                        console.log(result);
                        if (result.status) {
                            var html = "<img src=" + result.data + " width='100' height='100'>";
                            $("#content_img").append(html);
                        } else {
                            console.log(result.message)
                        }
                    }
                });

                //阻止默认行为即不让剪贴板内容在div中显示出来
                e.preventDefault();
            }
        }
    });
    </script>
</body>

</html>

以上就是Js实现粘贴上传图片的原理及示例的详细内容,更多关于JS 粘贴上传图片的资料请关注脚本之家其它相关文章!

相关文章

  • js如何去除数组中的empty undefined空项

    js如何去除数组中的empty undefined空项

    这篇文章主要介绍了js如何去除数组中的empty undefined空项,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • 一次Webpack配置文件的分离实战记录

    一次Webpack配置文件的分离实战记录

    这篇文章主要给大家介绍了关于一次Webpack配置文件的分离实战记录,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-11-11
  • JavaScript屏蔽指定区域内右键菜单

    JavaScript屏蔽指定区域内右键菜单

    有时候需要屏蔽部分区域内的右键菜单,下面的代码大家可以测试下。
    2010-03-03
  • 利用百度echarts实现图表功能简单入门示例【附源码下载】

    利用百度echarts实现图表功能简单入门示例【附源码下载】

    这篇文章主要介绍了利用百度echarts实现图表功能简单,结合简单示例形式分析了echarts插件的图标绘制功能相关实现技巧,并附带源码供读者下载参考,需要的朋友可以参考下
    2019-06-06
  • JavaScript中undefined和is not defined的区别与异常处理

    JavaScript中undefined和is not defined的区别与异常处理

    这篇文章主要给大家介绍了关于JavaScript中undefined和is not defined的区别与异常处理的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-03-03
  • JavaScript事件循环同步任务与异步任务

    JavaScript事件循环同步任务与异步任务

    这篇文章主要介绍了JavaScript事件循环同步任务与异步任务,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-07-07
  • 微信小程序实现下拉选项框

    微信小程序实现下拉选项框

    这篇文章主要为大家详细介绍了微信小程序实现下拉选项框,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • 利用Javascript仿Excel的数据透视分析功能

    利用Javascript仿Excel的数据透视分析功能

    这篇文章给大家介绍了如何利用Javascript实现类似Excel的数据透视分析功能,感兴趣的朋友们可以参考借鉴,下面来一起看看吧。
    2016-09-09
  • 轻松掌握JavaScript代理模式

    轻松掌握JavaScript代理模式

    这篇文章主要帮助大家轻松掌握JavaScript代理模式,什么是代理模式?代理的用途,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • 使用JS前端技术实现静态图片局部流动效果

    使用JS前端技术实现静态图片局部流动效果

    本文使用前端开发技术,结合 SVG 和 CSS 来实现类似的液化流动效果,包含的知识点主要包括:mask-image 遮罩、feTurbulence 和 feDisplacementMap 滤镜、filter 属性、canvas 绘制方法、TimelineMax 动画及input[type=file] 本地图片资源加载,需要的朋友可以参考下
    2022-08-08

最新评论