HTML5附件拖拽上传drop & google.gears实现代码


Posted in Javascript onApril 28, 2011

腾讯微博也已近实现了拖拽上传。其实很简单。
由于没有服务器支持在文章里不能做上传演示,下载实例
拖拽上传需要什么支持
1:需要浏览器支持 drop 事件。(响应拖拽事件获取file对象);
2:XMLHttpRequest 对象有 sendAsBinary 方法(用于发送数据);
以上两个条件 目前仅有 firefox 能达到。
chrome 第一项达标,第2项可以使用 google.gears 来模拟。
所以能实现拖拽上传的浏览器 有 firefox3.6 + 和 chrome7+。
如何实现拖拽上传
1:绑定 drop 事件。
2:获取 file 对象。
3:获取对象的2进制数据。
4:模拟数据发送post请求。

由于XMLhttprequest 和 google.gears 有很大不同。
所以我总进行了封装(UpLoadFileXHR)。上面 2 3 4 步骤我都封装好了。 
只要实例化 UpLoadFileXHR 就可以做拖拽文件上传了。点击下载

实例

1:引用 UpLoadFileXHR.js 文件

<script type="text/javascript" src="UpLoadFileXHR.js"></script>

2:实例化 upLoadFileXHR 绑定事件,设置参数等(具体可以看下面的UpLoadFileXHR介绍)
/** 
* var upLoad = new UpLoadFileXHR({url:'/cgi-bin/upload_img_fdfs', name:'Filedata'}); 
* url : 上传数据路径 
* name: 后台读取数据的 name 
* XHR : google.gears or new XMLHttpRequest() 
* format : 上传格式正则表达式 
* 
* 
* Methods 
* .onerror function 出现错误 
* .onloadstart function 传送开始 Parameter Event对象 (如果使用 google.gears 没有此方法) 
* .onprogress function 传送进度 Parameter Event对象 
* .onreadystatechange function 状态 Parameter this.XHR 
*/ 
var upLoad = new UpLoadFileXHR({url:'/cgi-bin/upload_img_fdfs', name:'Filedata'}); 
upLoad.format = /jpg|gif|jpeg|png/; // 设置上传格式 
//定义格式出错调用方法 
upLoad.onformaterror = function(){ 
alert('上传格式错误,仅支持[jpg|gif|jpeg|png] 格式!'); 
} 
// 定义上传状态方法 
// 这里就跟使用XMLhttprequest对象一样操作时间就可以了 
upLoad.onreadystatechange = function(){ 
if(upLoad.XHR.readyState == 4){ 
log(upLoad.XHR.responseText); 
} 
} 
// 开始上传 
upLoad.onloadstart = function(f){ 
// 开始上传 
} 
// 取得实时上传进度 
upLoad.onprogress = function(e){ 
/* 
* e.loaded 已经上传的数据大小 
* e.total 总大小 
* Math.round((e.loaded * 100) / e.total) 数据上传百分比 
*/ 
log('已经上传了 '+ Math.round((e.loaded * 100) / e.total) +'%') 
}

3:绑定drop
/* 
* 我们只需要 ondrop 事件 
* ondragenter 和 ondragover 直接绑定 stopPrevent 方法取消掉默认动作 
* ondrop 绑定 start 方法注意这里一定要用call把 this 指向 你实例化的对象 
*/ 
elem.ondragenter = upLoad.stopPrevent; 
elem.ondragover = upLoad.stopPrevent; 
elem.ondrop = function(e){upLoad.stopPrevent(e);upLoad.start.call(upLoad, e)};

4:可以拖拽了

如何使用 UpLoadFileXHR

new UpLoadFileXHR(Object)
var upLoadFile = new UpLoadFileXHR({url:'',name:''})
url string 上传地址 必须
name string 后台取得数据的name 必须
属性
format RegExp 过滤文件类型比如(/jpg|pen|jpeg|gif/);不设置则所有文件通过 非必要
debug Boolean 是否开启debug 默认false
自动填充属性
XHR object 实例化以后根据浏览器自动填充的属性,这里保存了当前上传文件所使用的xhr对象 自动
support object 当前用什么传输数据 {googleGears:Boolean, fileReader:Boolean} 自动
方法
start function 绑定到drop事件上的方法,接收一个事件默认e参数。请把this指向你当前的调用start的对象  
stopPrevent function 取消事件冒泡和事件默认动作 return false
checkFile function 检查file属性(格式,大小等) return Boolean
事件
onerror function 出错 默认参数 e(错误对象)
onformaterror function 格式不正确(判断依据 format 属性) 默认参数 file(当前file对象)
onloadstart function 开始上传 默认参数 file(google.gears下) or e(XMLhttprequest下)
onprogress function 上传进度 事件默认参数
onreadystatechange function 上传状态 事件默认参数
Javascript 相关文章推荐
JQuery与Ajax常用代码实现对比
Oct 03 Javascript
js TextArea的选中区域处理
Dec 28 Javascript
JavaScript window.document的属性、方法和事件小结
Oct 24 Javascript
web的各种前端打印方法之jquery打印插件jqprint实现网页打印
Jan 09 Javascript
JavaScript基础知识及常用方法总结
Jan 10 Javascript
jQuery中的ready函数与window.onload谁先执行
Jun 21 Javascript
AngularJS动态加载模块和依赖的方法分析
Nov 08 Javascript
AngularJS解决ng-if中的ng-model值无效的问题
Jun 21 Javascript
AngularJs点击状态值改变背景色的实例
Dec 18 Javascript
vscode调试node.js的实现方法
Mar 22 Javascript
微信小程序开发(一):服务器获取数据列表渲染操作示例
Jun 01 Javascript
微信小程序开发(二):页面跳转并传参操作示例
Jun 01 Javascript
很棒的学习jQuery的12个网站推荐
Apr 28 #Javascript
推荐20家国外的脚本下载网站
Apr 28 #Javascript
JavaScript中的this实例分析
Apr 28 #Javascript
File, FileReader 和 Ajax 文件上传实例分析(php)
Apr 27 #Javascript
JavaScript中获取未知对象属性的代码
Apr 27 #Javascript
JavaScript之HTMLCollection接口代码
Apr 27 #Javascript
利用jQuery操作对象数组的实现代码
Apr 27 #Javascript
You might like
php实现执行某一操作时弹出确认、取消对话框
2013/12/30 PHP
在WordPress中实现发送http请求的相关函数解析
2015/12/29 PHP
JavaScript Eval 函数使用
2010/03/23 Javascript
圣诞节Merry Christmas给博客添加浪漫的下雪效果基于jquery实现
2012/12/27 Javascript
浅谈关于JavaScript的语言特性分析
2013/04/11 Javascript
JS Replace 全部替换字符的用法小结
2013/12/24 Javascript
JavaScript实现动画打开半透明提示层的方法
2015/04/21 Javascript
Jquery Ajax Error 调试错误的技巧
2015/11/20 Javascript
js+html5实现的自由落体运动效果代码
2016/01/28 Javascript
VUEJS实战之利用laypage插件实现分页(3)
2016/06/13 Javascript
浅谈Node.js:Buffer模块
2016/12/05 Javascript
JavaScript箭头(arrow)函数详解
2017/06/04 Javascript
SelectPage v2.4 发布新增纯下拉列表和关闭分页功能
2017/09/07 Javascript
使用JavaScript中的lodash编写双色球效果
2018/06/24 Javascript
JavaScript中的一些实用小技巧总结
2019/04/07 Javascript
js实现列表按字母排序
2020/08/11 Javascript
一个检测OpenSSL心脏出血漏洞的Python脚本分享
2014/04/10 Python
详解Python编程中包的概念与管理
2015/10/16 Python
Python实现备份MySQL数据库的方法示例
2018/01/11 Python
Python+OpenCV实现图像融合的原理及代码
2018/12/03 Python
Python常见的pandas用法demo示例
2019/03/16 Python
Python assert关键字原理及实例解析
2019/12/13 Python
pytorch实现建立自己的数据集(以mnist为例)
2020/01/18 Python
Python3 io文本及原始流I/O工具用法详解
2020/03/23 Python
HTML5之SVG 2D入门11—用户交互性(动画)介绍及应用
2013/01/30 HTML / CSS
性能服装:HYLETE
2018/08/14 全球购物
毕业生找工作的自我评价
2013/10/18 职场文书
上学迟到的检讨书
2014/01/11 职场文书
低碳日宣传活动总结
2014/07/09 职场文书
英语课外活动总结
2014/08/27 职场文书
师德标兵先进事迹材料
2014/12/19 职场文书
军事博物馆观后感
2015/06/05 职场文书
2016年小学生教师节广播稿
2015/12/18 职场文书
nginx反向代理时如何保持长连接
2021/03/31 Servers
聊一聊python常用的编程模块
2021/05/14 Python
Python实现机器学习算法的分类
2021/06/03 Python