1. 程式人生 > 其它 >ajax之上傳檔案顯示實時上傳進度、速度

ajax之上傳檔案顯示實時上傳進度、速度

技術標籤:前後端互動前端ajax

利用FormData來實現檔案上傳及進度監控

  • FormData中的upload 事件
    • onloadstart 上傳開始
    • onprogress 資料傳輸進行中
      • evt.total :需要傳輸的總大小;
      • evt.loaded :當前上傳的檔案大小;
    • onabort 上傳操作終止
    • onerror 上傳失敗
    • onload 上傳成功
    • onloadend 上傳完成(不論成功與否)

上傳檔案進度圖片

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8"
>
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <input type="file" class="myfile"> 進度:<progress value="0" max="100"></progress
>
<span class="percent">0%</span> 速度:<span class="speed">0b/s</span> <button>點選上傳</button> <button>取消上傳</button> </body> <script> let xhr = new XMLHttpRequest(); let btns = document.querySelectorAll("button"
); let stime; //開始上傳時間 let sloaded; //檔案大小 btns[0].onclick = function(){ let file = document.querySelector(".myfile").files[0]; let form = new FormData(); form.append("myfile",file); xhr.open("post","/fileUpload",true); xhr.onload = function(){ console.log(xhr.responseText); } xhr.upload.onloadstart = function(){ console.log("開始上傳"); stime = new Date().getTime(); sloaded = 0; } xhr.upload.onprogress = function(evt){ // console.log("正在上傳"); // console.log(evt); // 上傳進度處理 // 當前檔案上傳的大小 evt.loaded let percent = (evt.loaded/evt.total*100).toFixed(0); // console.log(percent); document.querySelector("progress").value = percent; document.querySelector(".percent").innerHTML = percent + "%"; // 上傳速度處理 let endTime = new Date().getTime(); // 時間差 由於時間差是毫秒 故要除以1000 let dTime = (endTime - stime)/1000; // 當前時間內上傳的檔案大小 let dloaded = evt.loaded - sloaded; let speed = dloaded/dTime; let unit = "b/s"; stime = new Date().getTime(); sloaded = evt.loaded; if(speed/1024>1){ unit = "kb/s"; speed = speed/1024; } if(speed/1024>1){ unit = "mb/s"; speed = speed/1024; } // console.log(speed.toFixed(2)); document.querySelector(".speed").innerHTML = speed.toFixed(2) + unit; } xhr.upload.onload = function(){ console.log("上傳成功"); } xhr.upload.onloadend = function(){ console.log("上傳完成"); } xhr.upload.onabort = function(){ console.log("取消上傳"); } xhr.send(form); } btns[1].onclick = function(){ xhr.abort(); }
</script> </html>