热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

图片上传插件ImgUploadJS:用HTML5FileAPI实现截图粘贴上传、拖拽上传_html5教程技巧

这篇文章主要介绍了图片上传插件ImgUploadJS:用HTML5FileAPI实现截图粘贴上传、拖拽上传的相关资料,需要的朋友可以参考下
一 . 背景及效果

当前互联网上传文件最多的就是图片文件了,但是传统web图片的截图上传需要:截图保存->选择路径->保存后再点击上传->选择路径->上传->插入。
图片文件上传也需要:选择路径再->上传->插入,步骤繁杂,互联网体验为王,如果支持截图粘贴上传、拖拽上传将大大提升体验。
当前知乎和github对现代浏览器均支持这两种特性,闲来无事就学习实现了一下,今天就说一说这个1kb插件实现什么功能,怎么使用和原理。
首先看一下插效果:
截图后直接粘贴上传。

拖拽上传

http网络


二.使用示例
直接调用:

XML/HTML Code复制内容到剪贴板

  1. <p id="box" style="width: 800px; height: 400px; border: 1px solid;" contenteditable="true">p>
  2. <script type="text/Javascript" src="UploadImage.js">script>
  3. new UploadImage("box", "UploadHandler.ashx").upload(function (xhr) {//上传完成后的回调
  4. var img = new Image();
  5. img.src = xhr.responseText;
  6. this.appendChild(img);
  7. });


AMD/CMD

XML/HTML Code复制内容到剪贴板

  1. <p id="box" style="width: 800px; height: 400px; border: 1px solid;" contenteditable="true">p>
  2. <script type="text/Javascript" src="require.js">script>
  3. <script>
  4. require(['UploadImage'], function (UploadImage) {
  5. new UploadImage("box", "UploadHandler.ashx").upload(function (xhr) {//上传完成后的回调
  6. var img = new Image();
  7. img.src = xhr.responseText;
  8. this.appendChild(img);
  9. });
  10. })
  11. script>


三.浏览器支持
当前版本只支持以下,浏览器,后期可能会支持更多浏览器。
•IE11
•Chrome
•FireFox
•Safari(未测式,理论应该支持)
四.原理及源码
1.粘贴上传
处理目标容器(id)的paste事件,读取e.clipboardData中的数据,如果是图片进行以下处理:
用H5 File API(FileReader)获取文件的base64代码,并构建FormData异步上传。
2.拖拽上传
处理目标容器(id)的drop事件,读取e.dataTransfer.files(H5 File API: FileList)中的数据,如果是图片并构建FormData异步上传。
以下是初版本代码,比较简单。不再赘述。
部份核心代码

XML/HTML Code复制内容到剪贴板

  1. function UploadImage(id, url, key)
  2. {
  3. this.element = document.getElementById(id);
  4. this.url = url; //后端处理图片的路径
  5. this.imgKey = key || "PasteAreaImgKey"; //提到到后端的name
  6. }
  7. UploadImage.prototype.paste = function (callback, formData)
  8. {
  9. var thatthat = this;
  10. this.element.addEventListener('paste', function (e) {//处理目标容器(id)的paste事件
  11. if (e.clipboardData && e.clipboardData.items[0].type.indexOf('image') > -1) {
  12. var that = this,
  13. reader = new FileReader();
  14. file = e.clipboardData.items[0].getAsFile();//读取e.clipboardData中的数据:Blob对象
  15. reader.onload = function (e) { //reader读取完成后,xhr上传
  16. var xhr = new XMLHttpRequest(),
  17. fd = formData || (new FormData());;
  18. xhr.open('POST', thatthat.url, true);
  19. xhr.onload = function () {
  20. callback.call(that, xhr);
  21. }
  22. fd.append(thatthat.imgKey, this.result); // this.result得到图片的base64
  23. xhr.send(fd);
  24. }
  25. reader.readAsDataURL(file);//获取base64编码
  26. }
  27. }, false);
  28. }

推荐阅读
  • CSS|网格-行-结束属性原文:https://www.gee ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 本文整理了常用的CSS属性及用法,包括背景属性、边框属性、尺寸属性、可伸缩框属性、字体属性和文本属性等,方便开发者查阅和使用。 ... [详细]
  • css元素可拖动,如何使用CSS禁止元素拖拽?
    一、用户行为三剑客以下3个CSS属性:user-select属性可以设置是否允许用户选择页面中的图文内容;user-modify属性可以设置是否允许输入 ... [详细]
  • pyecharts 介绍
    一、pyecharts介绍ECharts,一个使用JavaScript实现的开源可视化库,可以流畅的运行在PC和移动设备上,兼容当前绝大部 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
  • macOS Big Sur全新设计大版本更新,10+个值得关注的新功能
    本文介绍了Apple发布的新一代操作系统macOS Big Sur,该系统采用全新的界面设计,包括图标、应用界面、程序坞和菜单栏等方面的变化。新系统还增加了通知中心、桌面小组件、强化的Safari浏览器以及隐私保护等多项功能。文章指出,macOS Big Sur的设计与iPadOS越来越接近,结合了去年iPadOS对鼠标的完善等功能。 ... [详细]
  • ECMA262规定typeof操作符的返回值和instanceof的使用方法
    本文介绍了ECMA262规定的typeof操作符对不同类型的变量的返回值,以及instanceof操作符的使用方法。同时还提到了在不同浏览器中对正则表达式应用typeof操作符的返回值的差异。 ... [详细]
  • 本文介绍了网页播放视频的三种实现方式,分别是使用html5的video标签、使用flash来播放以及使用object标签。其中,推荐使用html5的video标签来简单播放视频,但有些老的浏览器不支持html5。另外,还可以使用flash来播放视频,需要使用object标签。 ... [详细]
  • Apache Shiro 身份验证绕过漏洞 (CVE202011989) 详细解析及防范措施
    本文详细解析了Apache Shiro 身份验证绕过漏洞 (CVE202011989) 的原理和影响,并提供了相应的防范措施。Apache Shiro 是一个强大且易用的Java安全框架,常用于执行身份验证、授权、密码和会话管理。在Apache Shiro 1.5.3之前的版本中,与Spring控制器一起使用时,存在特制请求可能导致身份验证绕过的漏洞。本文还介绍了该漏洞的具体细节,并给出了防范该漏洞的建议措施。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了markdown[软件代理设置]相关的知识,希望对你有一定的参考价值。 ... [详细]
  • css,背景,位置,y,background, ... [详细]
  • this prototype 闭包 总结
    this对象整理下思路:一般用到this中的情景:1.构造方法中functionA(){this.nameyinshen;}varanewA() ... [详细]
  • JavaWeb介绍概念JavaWeb,是用Java技术来解决相关web互联网领域的技术总和。web包括:web服务器和web客户端两部分。Java在客户端的应用有javaapplet,不过使 ... [详细]
author-avatar
他丶是我唯一的执着_490
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有