首頁 > web前端 > js教程 > 如何使用html5和ajax上載文件

如何使用html5和ajax上載文件

尊渡假赌尊渡假赌尊渡假赌
發布: 2025-02-25 17:31:10
原創
1000 人瀏覽過

How to Asynchronously Upload Files Using HTML5 and Ajax

核心要點

  • 使用HTML5和Ajax異步上傳文件可在後台進行,允許用戶在上傳過程中執行頁面上的其他任務。此過程涉及創建HTML表單以將文件上傳到PHP頁面,JavaScript確保僅上傳小於300,000字節的JPG圖像。
  • JavaScript上傳函數需要XMLHttpRequest2對象(Firefox和Chrome中可用)。 XMLHttpRequest的.open()方法設置為將數據POST到PHP頁面,將HTTP標頭設置為文件的名稱,並將File對像傳遞給.send()方法。
  • PHP文件檢查X_FILENAME HTTP標頭以區分Ajax請求和標準表單POST。如果設置了文件名,PHP將檢索發布的數據並將其輸出到“uploads”文件夾中的新文件。標準HTML multipart/form-data POST使用通常的PHP $_FILE函數處理。

在之前的文章中,我們學習瞭如何使用HTML5拖放文件以及如何使用HTML5和JavaScript打開文件。現在我們有一組有效的文件,可以將每個文件上傳到服務器。此過程在後台異步進行,因此用戶可以在該過程進行時完成頁面上的其他任務。

HTML

讓我們再次檢查我們的HTML表單:

<fieldset><legend>HTML文件上传</legend><div> <label for="fileselect">要上传的文件:</label> <div>或在此处拖放文件</div></div><div>上传文件</div></fieldset>
登入後複製
登入後複製

我們將文件上傳到PHP頁面upload.php。當用戶點擊“上傳文件”時,該頁面將處理Ajax上傳請求和標準表單POST。我們的JavaScript將確保僅上傳小於300,000字節(MAX_FILE_SIZE中指定的值)的JPG圖像。

JavaScript

首先,我們需要在選擇或拖放一個或多個文件時調用的FileSelectHandler()函數中添加一行。在我們的File循環中,我們將調用另一個函數——UploadFile():

// 文件选择
function FileSelectHandler(e) {

    // 取消事件和悬停样式
    FileDragHover(e);

    // 获取FileList对象
    var files = e.target.files || e.dataTransfer.files;

    // 处理所有File对象
    for (var i = 0, f; f = files[i]; i++) {
        ParseFile(f);
        UploadFile(f);
    }

}
登入後複製

文件上傳需要XMLHttpRequest2對象,該對象目前在Firefox和Chrome中可用。在進行Ajax調用之前,我們確保.upload()方法可用,並且我們有一個文件大小小於MAX_FILE_SIZE表單值的JPG:

// 上传JPEG文件
function UploadFile(file) {

    var xhr = new XMLHttpRequest();
    if (xhr.upload && file.type == "image/jpeg" && file.size < $id("MAX_FILE_SIZE").value) {

        // 开始上传
        xhr.open("POST", $id("upload").action, true);
        xhr.setRequestHeader("X_FILENAME", file.name);
        xhr.send(file);

    }

}
登入後複製

XMLHttpRequest的.open()方法設置為將數據POST到upload.php(我們上傳表單的action屬性)。此外,我們將HTTP標頭設置為文件的名稱,並將File對像傳遞給.send()方法。

PHP

我們的PHP文件upload.php現在檢查X_FILENAME HTTP標頭以區分Ajax請求和標準表單POST:

<?php $fn = (isset($_SERVER['HTTP_X_FILENAME']) ? $_SERVER['HTTP_X_FILENAME'] : false); ?>
登入後複製

如果設置了文件名,PHP可以檢索發布的數據並將其輸出到“uploads”文件夾中的新文件。令人驚訝的是,這可以通過一行代碼實現:

if ($fn) {

    // AJAX调用
    file_put_contents(
        'uploads/' . $fn,
        file_get_contents('php://input')
    );
    echo "$fn 上传成功";
    exit();

}
登入後複製

可以使用通常的PHP $_FILE函數處理標準HTML multipart/form-data POST:

<fieldset><legend>HTML文件上传</legend><div> <label for="fileselect">要上传的文件:</label> <div>或在此处拖放文件</div></div><div>上传文件</div></fieldset>
登入後複製
登入後複製

您可以查看演示頁面,但是請注意,它託管在沒有PHP支持的服務器上,並且上傳不會發生。因此,請下載文件以檢查代碼並將其安裝在您自己的PHP服務器上。

上面的代碼可以工作,但是用戶不知道文件上傳是否已開始、完成或失敗。您需要閱讀本系列的最後一期: 如何創建HTML5和JavaScript中的文件上傳進度條……

常見問題解答(FAQ)關於HTML5 AJAX文件上傳

(此處省略了FAQ部分,因為這部分內容與偽原創目標無關,且篇幅較長。保留FAQ可以,但需要重新組織語言,使其與文章整體風格一致。)

以上是如何使用html5和ajax上載文件的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板