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 相关文章推荐
js 实现图片预加载(js操作 Image对象属性complete ,事件onload 异步加载图片)
Mar 25 Javascript
Chrome Form多次提交表单问题的解决方法
May 09 Javascript
javascript 10进制和62进制的相互转换
Jul 31 Javascript
AngularJS基础 ng-selected 指令简单示例
Aug 03 Javascript
jQuery插件ajaxFileUpload使用实例解析
Oct 19 Javascript
underscore之Collections_动力节点Java学院整理
Jul 10 Javascript
vue.js,ajax渲染页面的实例
Feb 11 Javascript
详解vue-cli+es6引入es5写的js(两种方法)
Apr 19 Javascript
JavaScript的查询机制LHS和RHS解析
Aug 16 Javascript
Vue 中使用 typescript的方法详解
Feb 17 Javascript
vue实现按钮切换图片
Jan 20 Vue.js
react如何快速设置文件路径别名
Apr 28 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设计模式之简单工厂模式详解
2014/09/04 PHP
解决ThinkPHP关闭调试模式时报错的问题汇总
2015/04/22 PHP
PHP实现的curl批量请求操作示例
2018/06/06 PHP
PHP mongodb操作类定义与用法示例【适合mongodb2.x和mongodb3.x】
2018/06/16 PHP
PHP耦合设计模式实例分析
2018/08/08 PHP
一个无限级XML绑定跨框架菜单(For IE)
2007/01/27 Javascript
JS Replace()的高级使用方法介绍
2013/06/29 Javascript
把input初始值不写value的具体实现方法
2013/07/04 Javascript
深入理解javascript中defer的作用
2013/12/11 Javascript
JavaScript实现添加及删除事件的方法小结
2015/08/04 Javascript
jQuery实现ajax调用WCF服务的方法(附带demo下载)
2015/12/04 Javascript
js实现有过渡渐变效果的图片轮播相册(兼容IE,ff)
2016/01/19 Javascript
JavaScript数组的一些奇葩行为
2016/01/25 Javascript
JavaScript记录光标在编辑器中位置的实现方法
2016/04/22 Javascript
jquery.serialize() 函数语法及简单实例
2016/07/08 Javascript
jQuery获取与设置iframe高度的方法
2016/08/01 Javascript
AngularJS入门教程之路由与多视图详解
2016/08/19 Javascript
Angularjs通过指令监听ng-repeat渲染完成后执行脚本的方法
2016/12/31 Javascript
简单谈谈js的数据类型
2017/09/25 Javascript
详解vue + vuex + directives实现权限按钮的思路
2017/10/24 Javascript
javascript设计模式 ? 外观模式原理与用法实例分析
2020/04/15 Javascript
Python之列表实现栈的工作功能
2019/01/28 Python
使用python将多个excel文件合并到同一个文件的方法
2019/07/09 Python
Python中拆分字符串的操作方法
2019/07/23 Python
Python搭建代理IP池实现获取IP的方法
2019/10/27 Python
python实现布隆过滤器及原理解析
2019/12/08 Python
pytorch构建多模型实例
2020/01/15 Python
Macbook安装Python最新版本、GUI开发环境、图像处理、视频处理环境详解
2020/02/17 Python
pandas中read_csv、rolling、expanding用法详解
2020/04/21 Python
重构Python代码的六个实例
2020/11/25 Python
iRobot官网:改变生活的家用机器人品牌
2016/09/20 全球购物
美国尼曼百货官网:Neiman Marcus
2019/09/05 全球购物
用C语言实现文件读写操作
2013/10/27 面试题
正科级干部考察材料
2014/05/29 职场文书
python游戏开发之pygame实现接球小游戏
2022/04/22 Python
教你使用Ubuntu搭建DNS服务器
2022/09/23 Servers