input type="file" 文件上傳的詳細介紹

一、選取並上傳文件

input type=”file” 是用於選擇本地文件並上傳到伺服器的功能。在實現過程中,需要注意以下幾點:

1、input 標籤的 name、id、accept 屬性

  name 屬性用於伺服器接收傳來的文件的參數名,id 屬性用於 JS 操作 DOM,accept 屬性可限制文件類型和大小。例如:

    <input type="file" name="file" id="file" accept=".jpg,.png" />

2、JS 獲取上傳的文件及其文件名

  通過 JS 獲取 input 標籤的 value,即文件路徑,我們可以獲得文件的文件名:

    let selectedFile = document.getElementById('file').files[0];
    console.log(selectedFile.name);

3、發送 POST 請求上傳文件

  實現文件上傳最常見的方法是使用表單提交,即 POST 方法。我們需要將文件轉化為二進位數據進行傳輸,同時需要設置請求頭和表單數據,代碼如下:

    let xhr = new XMLHttpRequest();
    let formData = new FormData();
    formData.append('file', selectedFile, selectedFile.name);
    xhr.open('POST', 'upload.php', true);
    xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
    xhr.send(formData);

二、文件上傳進度條

為了提高用戶體驗,我們可以增加文件上傳進度條。

1、監聽事件 onprogress 和 onload

  通過監聽事件 onprogress 和 onload,我們可以獲得上傳進度和上傳完成的信息。其中,loaded 屬性表示上傳的位元組數,total 屬性表示文件的總位元組數。

    xhr.upload.onprogress = function(event) {
        if (event.lengthComputable) {
            let percentComplete = Math.round((event.loaded / event.total) * 100);
            console.log(percentComplete + '% uploaded');
        }
    };
    xhr.onload = function() {
        console.log(xhr.responseText);
    };

2、實現進度條樣式

  在 HTML 中,我們可以設置一個進度條樣式:

    <div class="progress-bar"></div>

  在 CSS 中,我們可以設置進度條樣式:

    .progress-bar {
        width: 0%;
        height: 20px;
        background-color: green;
    }

  在 JS 中,我們可以實現進度條的動畫效果,代碼如下:

    xhr.upload.onprogress = function(event) {
        if (event.lengthComputable) {
            let percentComplete = Math.round((event.loaded / event.total) * 100);
            console.log(percentComplete + '% uploaded');
            let progressBar = document.querySelector('.progress-bar');
            progressBar.style.width = percentComplete + '%';
        }
    };
    xhr.onload = function() {
        console.log(xhr.responseText);
        let progressBar = document.querySelector('.progress-bar');
        progressBar.style.width = '100%';
    };

三、後台接收文件並保存

1、伺服器可以使用 PHP 來接收文件,PHP 提供了一個 $_FILES 全局變數,用於存儲上傳文件的信息。代碼如下:

    $file = $_FILES['file'];
    move_uploaded_file($file['tmp_name'], 'uploads/'.$file['name']);
    echo 'success';

2、在 move_uploaded_file 函數中,第一個參數是源文件路徑,第二個參數是目標文件路徑。在目標文件路徑中,可以指定文件的存儲位置和文件名。

3、為了防止文件重名,可以在文件名中添加時間戳等隨機數,如:

    $file = $_FILES['file'];
    $timestamp = time();
    move_uploaded_file($file['tmp_name'], 'uploads/'.$timestamp.'_'.$file['name']);
    echo 'success';

四、安全性考慮

1、客戶端限制文件類型和大小

  通過設置 input 標籤的 accept 屬性,可以限制文件類型,通過設置 input 標籤的 size 屬性,可以限制文件大小。

2、解決文件上傳漏洞

  文件上傳漏洞是指攻擊者通過上傳惡意文件,在網站伺服器上執行惡意代碼。為了解決文件上傳漏洞,可以採用以下方法:

  ①在服務端對上傳的文件進行檢查和限制,如限制上傳文件類型和大小;

  ②在客戶端對文件進行驗證和過濾,如限制文件類型和大小;

  ③對上傳文件的後綴名進行檢查,如 js、php、html 等文件不能正常解析;

  ④對伺服器上的上傳文件進行隔離和限制許可權,即避免上傳文件可以訪問或修改其他文件。

五、總結

以上是 input type=”file” 文件上傳的詳細介紹。通過合理的限制和措施,我們可以使文件上傳的功能更加安全、可靠、用戶友好。

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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-10 12:06
下一篇 2024-12-10 12:07

相關推薦

  • Python input參數變數用法介紹

    本文將從多個方面對Python input括弧里參數變數進行闡述與詳解,並提供相應的代碼示例。 一、基本介紹 Python input()函數用於獲取用戶輸入。當程序運行到inpu…

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

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

    編程 2025-04-28
  • input代碼中代表什麼

    在web開發中,input是最基礎的輸入控制項之一,常用來收集用戶的數據並提交至伺服器進行處理。本文將從多個方面詳細闡述input代碼中代表什麼。 一、type屬性 在HTML中,i…

    編程 2025-04-27
  • Python input列表

    本文將從多個角度詳細介紹Python怎麼input列表。 一、基礎概念 Python中的列表是一種有序的數據序列,可以包含任意類型的數據。當我們需要從用戶獲取一組數據時,可以使用i…

    編程 2025-04-27
  • Python用input賦值用法介紹

    本文將從多個方面詳細闡述Python中如何使用input函數來賦值,以幫助讀者更好的理解和應用該函數。 一、基礎使用 1、input函數的作用是從鍵盤輸入一行文本,並返回一個字元串…

    編程 2025-04-27
  • 畫er圖網站詳細介紹

    一、網站介紹 畫er圖是一個畫流程圖的在線工具,提供多種流程圖、思維導圖的繪製模板,方便用戶根據自身需求量身定製。該網站提供免費試用,可同時多人在線協作編輯。 畫er圖通過簡單明了…

    編程 2025-04-25
  • Burp Suite Mac詳細介紹

    Burp Suite Mac是一款全稱Burp Suite Professional for Mac OS X的Mac版網路攻擊測試工具,它能幫助安全測試人員對網路應用進行滲透測試…

    編程 2025-04-25
  • 百度地圖拾取器詳細介紹

    一、百度地圖拾取器地址 百度地圖拾取器是一款可快速獲取百度地圖具體位置坐標的工具。其地址為:https://api.map.baidu.com/lbsapi/getpoint/in…

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

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

    編程 2025-04-24
  • HTML5語義化標籤的詳細介紹

    一、<header> 標籤 <header> 標籤用於定義文檔或節的頁眉。通常包含導航元素和標題元素。 <header> <h1>這…

    編程 2025-04-24

發表回復

登錄後才能評論