找了很久的獲取上傳進度---記錄一下javascript
原文地址http://www.javashuo.com/article/p-qiuuiwli-v.htmljava
$.ajax({ type: "post", url: uploadUrl, data: formData, processData: false, contentType: false, xhr : function() { //獲取ajaxSettings中的xhr對象,爲它的upload屬性綁定progress事件的處理函數 myXhr = $.ajaxSettings.xhr(); if (myXhr.upload) { //檢查upload屬性是否存在 //綁定progress事件的回調函數 myXhr.upload.addEventListener( 'progress', progressHandlingFunction, false); } return myXhr; //xhr對象返回給jQuery使用 }, beforeSend: function() { ot = new Date().getTime(); //設置上傳開始時間 oloaded = 0;//設置上傳開始時,以上傳的文件大小爲0 console.log("開始上傳") }, success: function (data) { console.log("上傳成功") }, error: function (e) { console.log("上傳失敗") } }); function progressHandlingFunction(evt) { var nt = new Date().getTime();//獲取當前時間 var pertime = (nt-ot)/1000; //計算出上次調用該方法時到如今的時間差,單位爲s ot = new Date().getTime(); //從新賦值時間,用於下次計算 var perload = evt.loaded - oloaded; //計算該分段上傳的文件大小,單位b oloaded = evt.loaded;//從新賦值已上傳文件大小,用如下次計算 //上傳速度計算 var speed = perload/pertime;//單位b/s var bspeed = speed; var units = 'b/s';//單位名稱 if(speed/1024>1){ speed = speed/1024; units = 'k/s'; } if(speed/1024>1){ speed = speed/1024; units = 'M/s'; } speed = speed.toFixed(1); //剩餘時間 var resttime = ((evt.total-evt.loaded)/bspeed).toFixed(1); var percent = evt.loaded / evt.total * 100; console.log('當前速度:'+speed+units+',剩餘時間:'+resttime+'s,當前進度:'+percent.toFixed(2)+"%") }