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 相关文章推荐
javascript json 新手入门文档
Dec 03 Javascript
原生Js与jquery的多组处理, 仅展开一个区块的折叠效果
Jan 09 Javascript
JQuery里面的几种选择器 查找满足条件的元素$(&quot;#控件ID&quot;)
Aug 23 Javascript
jQuery中find()方法用法实例
Jan 07 Javascript
jQuery 1.9.1源码分析系列(十四)之常用jQuery工具
Dec 02 Javascript
JS实现数字格式千分位相互转换方法
Aug 01 Javascript
动态生成的DOM不会触发onclick事件的原因及解决方法
Aug 06 Javascript
bootstrap多种样式进度条展示
Dec 20 Javascript
vue2.0项目实现路由跳转的方法详解
Jun 21 Javascript
Vue CLI3基础学习之pages构建多页应用
Jun 02 Javascript
关于vue组件事件属性穿透详解
Oct 28 Javascript
vue props 单项数据流实例分享
Feb 16 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者的疑难问答(2)
2006/10/09 PHP
php Http_Template_IT类库进行模板替换
2009/03/19 PHP
PHP教程 基本语法
2009/10/23 PHP
通过php快速统计某个数据库中每张表的数据量
2012/09/04 PHP
PHP+apc+ajax实现的ajax_upload上传进度条代码
2016/01/25 PHP
详解php中反射的应用
2016/03/15 PHP
yii2中的rules 自定义验证规则详解
2016/04/19 PHP
php安装ssh2扩展的方法【Linux平台】
2016/07/20 PHP
解决thinkPHP 5 nginx 部署时,只跳转首页的问题
2019/10/16 PHP
如何使用jquery动态加载js,css文件实现代码
2013/04/03 Javascript
自己实现ajax封装示例分享
2014/04/01 Javascript
Easyui 之 Treegrid 笔记
2016/04/29 Javascript
TinyMCE汉化及本地上传图片功能实例详解
2016/05/31 Javascript
基于jPlayer三分屏的制作方法
2016/12/21 Javascript
详解Vue中一种简易路由传参办法
2017/09/15 Javascript
JS中使用textPath实现线条上的文字
2017/12/25 Javascript
百度小程序自定义通用toast组件
2019/07/17 Javascript
JavaScript实现HTML导航栏下拉菜单
2020/11/25 Javascript
浅谈es6中的元编程
2020/12/01 Javascript
Python中使用中文的方法
2011/02/19 Python
Python高级应用实例对比:高效计算大文件中的最长行的长度
2014/06/08 Python
python创建和删除目录的方法
2015/04/29 Python
python实现决策树、随机森林的简单原理
2018/03/26 Python
python简单验证码识别的实现方法
2019/05/10 Python
python实现银行管理系统
2019/10/25 Python
美国时尚大码女装购物网站:Avenue
2019/05/24 全球购物
奥地利智能家居和智能生活网上商店:tink.at
2019/10/07 全球购物
物业管理求职自荐信
2013/09/25 职场文书
会计岗位职责
2013/11/08 职场文书
DIY蛋糕店的创业计划书范文
2013/12/26 职场文书
开办饭店创业计划书
2013/12/28 职场文书
人民教师求职自荐信
2014/03/12 职场文书
追悼会答谢词
2015/01/05 职场文书
保研推荐信范文
2015/03/25 职场文书
自从在 IDEA 中用了热部署神器 JRebel 之后,开发效率提升了 10(真棒)
2021/06/26 Java/Android
MySQL 开窗函数
2022/02/15 MySQL