图片上传插件ImgUploadJS:用HTML5 File API 实现截图粘贴上传、拖拽上传


Posted in HTML / CSS onJanuary 20, 2016

一 . 背景及效果

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

图片上传插件ImgUploadJS:用HTML5 File API 实现截图粘贴上传、拖拽上传

拖拽上传

图片上传插件ImgUploadJS:用HTML5 File API 实现截图粘贴上传、拖拽上传

http网络

图片上传插件ImgUploadJS:用HTML5 File API 实现截图粘贴上传、拖拽上传


二.使用示例
直接调用:
XML/HTML Code复制内容到剪贴板
  1. <div id="box" style="width: 800px; height: 400px; border: 1px solid;" contenteditable="true"></div>    
  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. <div id="box" style="width: 800px; height: 400px; border: 1px solid;" contenteditable="true"></div>    
  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. }  
HTML / CSS 相关文章推荐
CSS改变网页中鼠标选中文字背景颜色例子
Apr 23 HTML / CSS
利用CSS3实现圆角的outline效果的教程
Jun 05 HTML / CSS
用纯CSS3实现网页中常见的小箭头
Oct 16 HTML / CSS
纯css3使用vw和vh实现自适应的方法
Feb 09 HTML / CSS
CSS3实现的渐变幻灯片效果
Dec 07 HTML / CSS
基于HTML5 Canvas 实现商场监控实例详解
Nov 20 HTML / CSS
html5自带表单验证体验优化及提示气泡修改功能
Sep 12 HTML / CSS
canvas实现圆绘制的示例代码
Sep 11 HTML / CSS
html5使用canvas实现跟随光标跳动的火焰效果
Jan 07 HTML / CSS
HTML5 Canvas 实现圆形进度条并显示数字百分比效果示例
Aug 18 HTML / CSS
SVG实现多彩圆环倒计时效果的示例代码
Nov 21 HTML / CSS
AmazeUI 等分网格的实现示例
Aug 25 HTML / CSS
HTML5 History API 实现无刷新跳转
Jan 11 #HTML / CSS
基于HTML5新特性Mutation Observer实现编辑器的撤销和回退操作
Jan 11 #HTML / CSS
Html5插件教程之添加浏览器放大镜效果的商品橱窗
Jan 07 #HTML / CSS
移动端html5 meta标签的神奇功效
Jan 06 #HTML / CSS
Web时代变迁及html5与html4的区别
Jan 06 #HTML / CSS
HTML5学习笔记之html5与传统html区别
Jan 06 #HTML / CSS
探讨HTML5移动开发的几大特性(必看)
Dec 30 #HTML / CSS
You might like
apache rewrite_module模块使用教程
2008/01/10 PHP
Smarty变量用法详解
2016/05/11 PHP
PHP互换两个变量值的方法(不用第三变量)
2016/11/14 PHP
PHP生成加减算法方式的验证码实例
2018/03/12 PHP
PHP连接SQL Server的方法分析【基于thinkPHP5.1框架】
2019/05/06 PHP
深入分析PHP设计模式
2020/06/15 PHP
用jscript实现新建word文档
2007/06/15 Javascript
JavaScript利用正则表达式去除日期中的“-”
2014/07/01 Javascript
DOM 事件的深入浅出(二)
2016/12/05 Javascript
jquery实现拖动效果(代码分享)
2017/01/25 Javascript
javascript实现table单元格点击展开隐藏效果(实例代码)
2017/04/10 Javascript
vue.js单页面应用实例的简单实现
2017/04/10 Javascript
Nuxt.js开启SSR渲染的教程详解
2018/11/30 Javascript
用WebStorm进行Angularjs 2开发(环境篇:Windows 10,Angular-cli方式)
2018/12/05 Javascript
python正则表达式match和search用法实例
2015/03/26 Python
举例讲解Python编程中对线程锁的使用
2016/07/12 Python
Python列表(List)知识点总结
2019/02/18 Python
基于python实现计算且附带进度条代码实例
2020/03/31 Python
python 实现读取csv数据,分类求和 再写进 csv
2020/05/18 Python
用于ETL的Python数据转换工具详解
2020/07/21 Python
深入了解NumPy 高级索引
2020/07/24 Python
python3.6中anaconda安装sklearn踩坑实录
2020/07/28 Python
python批量修改交换机密码的示例
2020/09/22 Python
python 使用xlsxwriter循环向excel中插入数据和图片的操作
2021/01/01 Python
python工具快速为音视频自动生成字幕(使用说明)
2021/01/27 Python
无畏的旅行:Intrepid Travel
2017/12/20 全球购物
美国马匹用品和骑马配件购物网站:Horse.com
2018/01/08 全球购物
贪睡宠物用品:Snoozer Pet Products
2020/02/04 全球购物
人力资源主管岗位职责
2014/01/29 职场文书
秋季运动会广播稿大全
2014/02/17 职场文书
公司请假条格式
2014/04/11 职场文书
商务经理岗位职责
2014/07/30 职场文书
国庆节新闻稿
2015/07/17 职场文书
感恩主题班会教案
2015/08/12 职场文书
毕业生求职自荐信(2016最新版)
2016/01/28 职场文书
导游词之黄帝陵景区
2019/09/16 职场文书