web前端js上傳檔案
阿新 • • 發佈:2019-01-26
//圖片上傳
var xhr;
//上傳檔案方法
function UpladFile() {
var fileObj = document.getElementById("file").files[0]; // js 獲取檔案物件
var url = "http://localhost:8080" + "/api/attachment/upload"; // 接收上傳檔案的後臺地址
var form = new FormData(); // FormData 物件
form.append("file" , fileObj); // 檔案物件
xhr = new XMLHttpRequest(); // XMLHttpRequest 物件
xhr.open("post", url, true); //post方式,url為伺服器請求地址,true 該引數規定請求是否非同步處理。
xhr.onload = uploadComplete; //請求完成
xhr.onerror = uploadFailed; //請求失敗
xhr.upload.onprogress = progressFunction;//【上傳進度呼叫方法實現】
xhr.upload.onloadstart = function(){//上傳開始執行方法
ot = new Date().getTime(); //設定上傳開始時間
oloaded = 0;//設定上傳開始時,以上傳的檔案大小為0
};
xhr.send(form); //開始上傳,傳送form資料
}
//上傳成功響應
function uploadComplete(evt) {
//服務斷接收完檔案返回的結果
var data = JSON.parse(evt.target.responseText);
if(data.success) {
alert("上傳成功!");
}else{
alert("上傳失敗!");
}
}
//上傳失敗
function uploadFailed(evt) {
alert("上傳失敗!");
}
//取消上傳
function cancleUploadFile(){
xhr.abort();
}
//上傳進度實現方法,上傳過程中會頻繁呼叫該方法
function progressFunction(evt) {
var progressBar = document.getElementById("progressBar");
var percentageDiv = document.getElementById("percentage");
// event.total是需要傳輸的總位元組,event.loaded是已經傳輸的位元組。如果event.lengthComputable不為真,則event.total等於0
if (evt.lengthComputable) {//
progressBar.max = evt.total;
progressBar.value = evt.loaded;
percentageDiv.innerHTML = Math.round(evt.loaded / evt.total * 100) + "%";
}
var time = document.getElementById("time");
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);
time.innerHTML = ',速度:'+speed+units+',剩餘時間:'+resttime+'s';
if(bspeed==0) time.innerHTML = '上傳已取消';
}