HTML5附件拖拽上傳drop & google.gears實(shí)現(xiàn)代碼
由于沒有服務(wù)器支持在文章里不能做上傳演示,下載實(shí)例
拖拽上傳需要什么支持
1:需要瀏覽器支持 drop 事件。(響應(yīng)拖拽事件獲取file對象);
2:XMLHttpRequest 對象有 sendAsBinary 方法(用于發(fā)送數(shù)據(jù));
以上兩個條件 目前僅有 firefox 能達(dá)到。
chrome 第一項達(dá)標(biāo),第2項可以使用 google.gears 來模擬。
所以能實(shí)現(xiàn)拖拽上傳的瀏覽器 有 firefox3.6 + 和 chrome7+。
如何實(shí)現(xiàn)拖拽上傳
1:綁定 drop 事件。
2:獲取 file 對象。
3:獲取對象的2進(jìn)制數(shù)據(jù)。
4:模擬數(shù)據(jù)發(fā)送post請求。
由于XMLhttprequest 和 google.gears 有很大不同。
所以我總進(jìn)行了封裝(UpLoadFileXHR)。上面 2 3 4 步驟我都封裝好了。
只要實(shí)例化 UpLoadFileXHR 就可以做拖拽文件上傳了。點(diǎn)擊下載
實(shí)例
1:引用 UpLoadFileXHR.js 文件
<script type="text/javascript" src="UpLoadFileXHR.js"></script>
2:實(shí)例化 upLoadFileXHR 綁定事件,設(shè)置參數(shù)等(具體可以看下面的UpLoadFileXHR介紹)
/**
* var upLoad = new UpLoadFileXHR({url:'/cgi-bin/upload_img_fdfs', name:'Filedata'});
* url : 上傳數(shù)據(jù)路徑
* name: 后臺讀取數(shù)據(jù)的 name
* XHR : google.gears or new XMLHttpRequest()
* format : 上傳格式正則表達(dá)式
*
*
* Methods
* .onerror function 出現(xiàn)錯誤
* .onloadstart function 傳送開始 Parameter Event對象 (如果使用 google.gears 沒有此方法)
* .onprogress function 傳送進(jìn)度 Parameter Event對象
* .onreadystatechange function 狀態(tài) Parameter this.XHR
*/
var upLoad = new UpLoadFileXHR({url:'/cgi-bin/upload_img_fdfs', name:'Filedata'});
upLoad.format = /jpg|gif|jpeg|png/; // 設(shè)置上傳格式
//定義格式出錯調(diào)用方法
upLoad.onformaterror = function(){
alert('上傳格式錯誤,僅支持[jpg|gif|jpeg|png] 格式!');
}
// 定義上傳狀態(tài)方法
// 這里就跟使用XMLhttprequest對象一樣操作時間就可以了
upLoad.onreadystatechange = function(){
if(upLoad.XHR.readyState == 4){
log(upLoad.XHR.responseText);
}
}
// 開始上傳
upLoad.onloadstart = function(f){
// 開始上傳
}
// 取得實(shí)時上傳進(jìn)度
upLoad.onprogress = function(e){
/*
* e.loaded 已經(jīng)上傳的數(shù)據(jù)大小
* e.total 總大小
* Math.round((e.loaded * 100) / e.total) 數(shù)據(jù)上傳百分比
*/
log('已經(jīng)上傳了 '+ Math.round((e.loaded * 100) / e.total) +'%')
}
3:綁定drop
/*
* 我們只需要 ondrop 事件
* ondragenter 和 ondragover 直接綁定 stopPrevent 方法取消掉默認(rèn)動作
* ondrop 綁定 start 方法注意這里一定要用call把 this 指向 你實(shí)例化的對象
*/
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 | 后臺取得數(shù)據(jù)的name | 必須 |
| 屬性 | |||
| format | RegExp | 過濾文件類型比如(/jpg|pen|jpeg|gif/);不設(shè)置則所有文件通過 | 非必要 |
| debug | Boolean | 是否開啟debug | 默認(rèn)false |
| 自動填充屬性 | |||
| XHR | object | 實(shí)例化以后根據(jù)瀏覽器自動填充的屬性,這里保存了當(dāng)前上傳文件所使用的xhr對象 | 自動 |
| support | object | 當(dāng)前用什么傳輸數(shù)據(jù) {googleGears:Boolean, fileReader:Boolean} |
自動 |
| 方法 | |||
| start | function | 綁定到drop事件上的方法,接收一個事件默認(rèn)e參數(shù)。請把this指向你當(dāng)前的調(diào)用start的對象 | |
| stopPrevent | function | 取消事件冒泡和事件默認(rèn)動作 | return false |
| checkFile | function | 檢查file屬性(格式,大小等) | return Boolean |
| 事件 | |||
| onerror | function | 出錯 | 默認(rèn)參數(shù) e(錯誤對象) |
| onformaterror | function | 格式不正確(判斷依據(jù) format 屬性) | 默認(rèn)參數(shù) file(當(dāng)前file對象) |
| onloadstart | function | 開始上傳 | 默認(rèn)參數(shù) file(google.gears下) or e(XMLhttprequest下) |
| onprogress | function | 上傳進(jìn)度 | 事件默認(rèn)參數(shù) |
| onreadystatechange | function | 上傳狀態(tài) | 事件默認(rèn)參數(shù) |
- Dropzone.js實(shí)現(xiàn)文件拖拽上傳功能(附源碼下載)
- NodeJS與HTML5相結(jié)合實(shí)現(xiàn)拖拽多個文件上傳到服務(wù)器的實(shí)現(xiàn)方法
- JS HTML5拖拽上傳圖片預(yù)覽
- jQuery插件實(shí)現(xiàn)文件上傳功能(支持拖拽)
- Js+php實(shí)現(xiàn)異步拖拽上傳文件
- Nodejs+express+html5 實(shí)現(xiàn)拖拽上傳
- javascript拖拽上傳類庫DropzoneJS使用方法
- 一些常用彈出窗口/拖放/異步文件上傳等實(shí)用代碼
- 關(guān)于js拖拽上傳 [一個拖拽上傳修改頭像的流程]
- HTML5 js實(shí)現(xiàn)拖拉上傳文件功能
相關(guān)文章
深入理解ES6之?dāng)?shù)據(jù)解構(gòu)的用法
本文介紹了深入理解ES6之?dāng)?shù)據(jù)解構(gòu)的用法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-01-01
JavaScript 創(chuàng)建隨機(jī)數(shù)和隨機(jī)圖片
關(guān)于javascript隨機(jī)數(shù)的,很早以前的文章了,不過內(nèi)容還是不錯的,如果想要更多的效果,可以去腳本之家搜下。2009-12-12
IE不出現(xiàn)Flash激活框的小發(fā)現(xiàn)的js實(shí)現(xiàn)方法
IE不出現(xiàn)Flash激活框的小發(fā)現(xiàn)的js實(shí)現(xiàn)方法...2007-09-09
JS實(shí)現(xiàn)的base64加密解密完整實(shí)例
這篇文章主要介紹了JS實(shí)現(xiàn)的base64加密解密,以完整實(shí)例形式分析了JavaScript基于base64編碼實(shí)現(xiàn)加密與解密的具體步驟與相關(guān)技巧,并附帶了相關(guān)的加密解密在線工具地址供大家參考,需要的朋友可以參考下2016-04-04
JavaScript使用ActiveXObject訪問Access和SQL Server數(shù)據(jù)庫
這篇文章主要介紹了JavaScript使用ActiveXObject訪問Access和SQL Server數(shù)據(jù)庫,本文分別給出相應(yīng)操作代碼,需要的朋友可以參考下2015-04-04
js eval函數(shù)使用,js對象和字符串互轉(zhuǎn)實(shí)例
下面小編就為大家?guī)硪黄猨s eval函數(shù)使用,js對象和字符串互轉(zhuǎn)實(shí)例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-03-03

