由於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:可以拖拽了