如何利用onuploadprogress事件監測文件上傳進度

一、什麼是onuploadprogress事件

onuploadprogress事件是XMLHttpRequest2中新增的事件,用於在文件上傳過程中監測文件上傳的進度。

在XMLHttpRequest2之前,我們只能使用onreadystatechange事件來監測文件上傳的狀態,但是這種方式不能直接獲取文件上傳的進度信息。

通過使用onuploadprogress事件,我們可以獲得以下信息:

loaded: 已上傳的位元組數
total: 文件總位元組數

這些信息可以用來計算文件上傳的進度。

二、如何使用onuploadprogress事件

首先,我們需要創建XMLHttpRequest對象:

var xhr = new XMLHttpRequest();

然後,我們需要為xhr對象添加onuploadprogress事件監聽器:

xhr.upload.addEventListener("progress", uploadProgress, false);

upload屬性表示上傳過程中的事件,addEventListner函數用於添加事件監聽器。第一個參數為事件名稱,第二個參數為事件處理函數,第三個參數為是否在捕獲階段處理事件。

我們需要在事件處理函數中獲取已上傳的位元組數和文件總位元組數,並計算上傳進度:

function uploadProgress(event) {
  if (event.lengthComputable) {
    var percentComplete = event.loaded / event.total;
    // 計算上傳進度,並將結果顯示出來
    console.log(percentComplete);
  } else {
    // 無法計算上傳進度
  }
}

在事件處理函數中,我們首先檢查event對象的lengthComputable屬性是否為true,如果為true,說明文件總位元組數是可計算的,我們就可以計算上傳進度。

當事件處理完畢後,我們就可以發送文件上傳請求:

xhr.open("POST", "upload.php", true);
xhr.send(formData);

其中,”POST”表示請求的方法,”upload.php”表示文件上傳的地址,true表示使用非同步模式發送請求,formData表示要上傳的文件。如果需要上傳多個文件,可以使用FormData對象添加多個文件:

var formData = new FormData();
formData.append("file1", file1);
formData.append("file2", file2);

三、如何在頁面上顯示上傳進度

我們可以使用HTML5的progress元素來顯示文件上傳的進度:

<progress id="uploader" value="0"></progress>

我們還需要使用JavaScript更新progress元素的value屬性,來顯示上傳進度:

function uploadProgress(event) {
  if (event.lengthComputable) {
    var percentComplete = Math.round(event.loaded / event.total * 100);
    document.getElementById("uploader").value = percentComplete;
  }
}

在這裡,我們將計算出的上傳進度乘以100,並使用Math.round函數將結果四捨五入,然後將結果更新到progress元素的value屬性中。

四、完整代碼示例

HTML:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>文件上傳進度監測</title>
</head>
<body>
  <form enctype="multipart/form-data" method="post">
    <input type="file" name="file1">
    <input type="file" name="file2">
    <input type="submit" value="上傳">
  </form>
  <progress id="uploader" value="0"></progress>
  <script src="upload.js"></script>
</body>
</html>

JavaScript:

var xhr = new XMLHttpRequest();
xhr.upload.addEventListener("progress", uploadProgress, false);
xhr.open("POST", "upload.php", true);

var formData = new FormData();
formData.append("file1", document.getElementsByName("file1")[0].files[0]);
formData.append("file2", document.getElementsByName("file2")[0].files[0]);

xhr.send(formData);

function uploadProgress(event) {
  if (event.lengthComputable) {
    var percentComplete = Math.round(event.loaded / event.total * 100);
    document.getElementById("uploader").value = percentComplete;
  }
}

PHP:

foreach ($_FILES as $file) {
  move_uploaded_file($file["tmp_name"], "/path/to/uploads/" . $file["name"]);
}

在這個PHP腳本中,我們首先使用foreach循環遍歷所有上傳的文件。然後,我們使用move_uploaded_file函數將上傳的文件移動到指定目錄下。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/190365.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-29 22:33
下一篇 2024-11-29 22:33

相關推薦

  • 抖音外放親媽下葬事件的背後真相

    近期,一段抖音外放親媽下葬的視頻引發廣泛關注和熱議。不少人對這個事件感到震驚和憤怒,認為這種行為非常不尊重親人,觸犯了社會公德和家庭道德。但是,事情真相到底是什麼呢?我們有必要從多…

    編程 2025-04-28
  • 使用 DRF 實現文件上傳

    文件上傳是 web 應用程序中最常見的需求之一,本文將介紹如何使用 Django Rest Framework (DRF) 來實現文件上傳。通過本文,你將學習到如何使用 DRF 中…

    編程 2025-04-28
  • Python 進度管理系統

    本文將從多個方面詳細闡述 Python 進度管理系統,包括如何使用 Python 進行進度管理系統的開發以及管理、優化等方面的問題。 一、系統開發 為了開發一個完善的進度管理系統,…

    編程 2025-04-27
  • cc.director.on事件監聽器

    本文將從多個方面詳細介紹Cocos Creator中的cc.director.on事件監聽器。 一、cc.director.on的作用和用法 cc.director.on是Coco…

    編程 2025-04-27
  • JavaScript點擊事件全方位指南

    一、click事件基礎 click事件是最常用的滑鼠事件之一,當元素被單擊時觸發。click事件適用於大多數HTML元素(<a>、<button>)和SVG…

    編程 2025-04-25
  • 詳解JavaScript onclick事件

    一、onclick的基礎知識 onclick事件是JavaScript中最常用的事件之一,它在用戶點擊某個HTML元素時觸發。通常我們可以通過給元素添加一個onclick屬性來綁定…

    編程 2025-04-25
  • 探究keyup和keydown事件

    一、介紹 在前端開發中,代碼執行通常與用戶操作有關。用戶操作中,常用的是鍵盤事件,其中keydown和keyup事件是最為常見的兩種。這兩種事件都可以用來監測用戶按鍵,但它們有不同…

    編程 2025-04-25
  • CSS 事件穿透

    在 Web 開發中,CSS 負責網頁的樣式,而 JavaScript 負責網頁的行為。雖然兩者有不同的職責,但在實際的開發過程中,我們經常會遇到將二者結合起來的場景。比如需要通過 …

    編程 2025-04-25
  • SpringBoot文件上傳詳解

    一、前言 隨著互聯網的發展,文件上傳成為了必備的功能之一,而SpringBoot作為目前最流行的開發框架之一,為文件上傳提供了便捷而強大的解決方案。 二、使用multipart/f…

    編程 2025-04-24
  • onclick事件詳解

    實現交互功能是Web開發的重要部分,而onclick事件就是其中一個最常用的交互事件之一。在本文中,我們將從多個角度對onclick事件進行詳細闡述。 一、使用onclick事件實…

    編程 2025-04-24

發表回復

登錄後才能評論