国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁(yè) web前端 js教程 如何使用html5和ajax上載文件

如何使用html5和ajax上載文件

Feb 25, 2025 pm 05:31 PM

How to Asynchronously Upload Files Using HTML5 and Ajax

核心要點(diǎn)

  • 使用HTML5和Ajax異步上傳文件可在后臺(tái)進(jìn)行,允許用戶在上傳過(guò)程中執(zhí)行頁(yè)面上的其他任務(wù)。此過(guò)程涉及創(chuàng)建HTML表單以將文件上傳到PHP頁(yè)面,JavaScript確保僅上傳小于300,000字節(jié)的JPG圖像。
  • JavaScript上傳函數(shù)需要XMLHttpRequest2對(duì)象(Firefox和Chrome中可用)。XMLHttpRequest的.open()方法設(shè)置為將數(shù)據(jù)POST到PHP頁(yè)面,將HTTP標(biāo)頭設(shè)置為文件的名稱,并將File對(duì)象傳遞給.send()方法。
  • PHP文件檢查X_FILENAME HTTP標(biāo)頭以區(qū)分Ajax請(qǐng)求和標(biāo)準(zhǔn)表單POST。如果設(shè)置了文件名,PHP將檢索發(fā)布的數(shù)據(jù)并將其輸出到“uploads”文件夾中的新文件。標(biāo)準(zhǔn)HTML multipart/form-data POST使用通常的PHP $_FILE函數(shù)處理。

在之前的文章中,我們學(xué)習(xí)了如何使用HTML5拖放文件以及如何使用HTML5和JavaScript打開(kāi)文件?,F(xiàn)在我們有一組有效的文件,可以將每個(gè)文件上傳到服務(wù)器。此過(guò)程在后臺(tái)異步進(jìn)行,因此用戶可以在該過(guò)程進(jìn)行時(shí)完成頁(yè)面上的其他任務(wù)。

HTML

讓我們?cè)俅螜z查我們的HTML表單:

<fieldset><legend>HTML文件上傳</legend><div> <label for="fileselect">要上傳的文件:</label> <div>或在此處拖放文件</div></div><div>上傳文件</div></fieldset>

我們將文件上傳到PHP頁(yè)面upload.php。當(dāng)用戶點(diǎn)擊“上傳文件”時(shí),該頁(yè)面將處理Ajax上傳請(qǐng)求和標(biāo)準(zhǔn)表單POST。我們的JavaScript將確保僅上傳小于300,000字節(jié)(MAX_FILE_SIZE中指定的值)的JPG圖像。

JavaScript

首先,我們需要在選擇或拖放一個(gè)或多個(gè)文件時(shí)調(diào)用的FileSelectHandler()函數(shù)中添加一行。在我們的File循環(huán)中,我們將調(diào)用另一個(gè)函數(shù)——UploadFile():

// 文件選擇
function FileSelectHandler(e) {

    // 取消事件和懸停樣式
    FileDragHover(e);

    // 獲取FileList對(duì)象
    var files = e.target.files || e.dataTransfer.files;

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

}

文件上傳需要XMLHttpRequest2對(duì)象,該對(duì)象目前在Firefox和Chrome中可用。在進(jìn)行Ajax調(diào)用之前,我們確保.upload()方法可用,并且我們有一個(gè)文件大小小于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) {

        // 開(kāi)始上傳
        xhr.open("POST", $id("upload").action, true);
        xhr.setRequestHeader("X_FILENAME", file.name);
        xhr.send(file);

    }

}

XMLHttpRequest的.open()方法設(shè)置為將數(shù)據(jù)POST到upload.php(我們上傳表單的action屬性)。此外,我們將HTTP標(biāo)頭設(shè)置為文件的名稱,并將File對(duì)象傳遞給.send()方法。

PHP

我們的PHP文件upload.php現(xiàn)在檢查X_FILENAME HTTP標(biāo)頭以區(qū)分Ajax請(qǐng)求和標(biāo)準(zhǔn)表單POST:

<?php $fn = (isset($_SERVER['HTTP_X_FILENAME']) ? $_SERVER['HTTP_X_FILENAME'] : false); ?>

如果設(shè)置了文件名,PHP可以檢索發(fā)布的數(shù)據(jù)并將其輸出到“uploads”文件夾中的新文件。令人驚訝的是,這可以通過(guò)一行代碼實(shí)現(xiàn):

if ($fn) {

    // AJAX調(diào)用
    file_put_contents(
        'uploads/' . $fn,
        file_get_contents('php://input')
    );
    echo "$fn 上傳成功";
    exit();

}

可以使用通常的PHP $_FILE函數(shù)處理標(biāo)準(zhǔn)HTML multipart/form-data POST:

<fieldset><legend>HTML文件上傳</legend><div> <label for="fileselect">要上傳的文件:</label> <div>或在此處拖放文件</div></div><div>上傳文件</div></fieldset>

您可以查看演示頁(yè)面,但是請(qǐng)注意,它托管在沒(méi)有PHP支持的服務(wù)器上,并且上傳不會(huì)發(fā)生。因此,請(qǐng)下載文件以檢查代碼并將其安裝在您自己的PHP服務(wù)器上。

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

常見(jiàn)問(wèn)題解答(FAQ)關(guān)于HTML5 AJAX文件上傳

(此處省略了FAQ部分,因?yàn)檫@部分內(nèi)容與偽原創(chuàng)目標(biāo)無(wú)關(guān),且篇幅較長(zhǎng)。保留FAQ可以,但需要重新組織語(yǔ)言,使其與文章整體風(fēng)格一致。)

以上是如何使用html5和ajax上載文件的詳細(xì)內(nèi)容。更多信息請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動(dòng)的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開(kāi)發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)代碼編輯軟件(SublimeText3)

熱門(mén)話題

Java vs. JavaScript:清除混亂 Java vs. JavaScript:清除混亂 Jun 20, 2025 am 12:27 AM

Java和JavaScript是不同的編程語(yǔ)言,各自適用于不同的應(yīng)用場(chǎng)景。Java用于大型企業(yè)和移動(dòng)應(yīng)用開(kāi)發(fā),而JavaScript主要用于網(wǎng)頁(yè)開(kāi)發(fā)。

JavaScript評(píng)論:簡(jiǎn)短說(shuō)明 JavaScript評(píng)論:簡(jiǎn)短說(shuō)明 Jun 19, 2025 am 12:40 AM

JavascriptconcommentsenceenceEncorenceEnterential gransimenting,reading and guidingCodeeXecution.1)單inecommentsareusedforquickexplanations.2)多l(xiāng)inecommentsexplaincomplexlogicorprovideDocumentation.3)

如何在JS中與日期和時(shí)間合作? 如何在JS中與日期和時(shí)間合作? Jul 01, 2025 am 01:27 AM

JavaScript中的日期和時(shí)間處理需注意以下幾點(diǎn):1.創(chuàng)建Date對(duì)象有多種方式,推薦使用ISO格式字符串以保證兼容性;2.獲取和設(shè)置時(shí)間信息可用get和set方法,注意月份從0開(kāi)始;3.手動(dòng)格式化日期需拼接字符串,也可使用第三方庫(kù);4.處理時(shí)區(qū)問(wèn)題建議使用支持時(shí)區(qū)的庫(kù),如Luxon。掌握這些要點(diǎn)能有效避免常見(jiàn)錯(cuò)誤。

JavaScript與Java:開(kāi)發(fā)人員的全面比較 JavaScript與Java:開(kāi)發(fā)人員的全面比較 Jun 20, 2025 am 12:21 AM

JavaScriptIspreferredforredforwebdevelverment,而Javaisbetterforlarge-ScalebackendsystystemsandSandAndRoidApps.1)JavascriptexcelcelsincreatingInteractiveWebexperienceswebexperienceswithitswithitsdynamicnnamicnnamicnnamicnnamicnemicnemicnemicnemicnemicnemicnemicnemicnddommanipulation.2)

為什么要將標(biāo)簽放在的底部? 為什么要將標(biāo)簽放在的底部? Jul 02, 2025 am 01:22 AM

PlacingtagsatthebottomofablogpostorwebpageservespracticalpurposesforSEO,userexperience,anddesign.1.IthelpswithSEObyallowingsearchenginestoaccesskeyword-relevanttagswithoutclutteringthemaincontent.2.Itimprovesuserexperiencebykeepingthefocusonthearticl

JavaScript:探索用于高效編碼的數(shù)據(jù)類型 JavaScript:探索用于高效編碼的數(shù)據(jù)類型 Jun 20, 2025 am 12:46 AM

javascripthassevenfundaMentalDatatypes:數(shù)字,弦,布爾值,未定義,null,object和symbol.1)numberSeadUble-eaduble-ecisionFormat,forwidevaluerangesbutbecautious.2)

什么是在DOM中冒泡和捕獲的事件? 什么是在DOM中冒泡和捕獲的事件? Jul 02, 2025 am 01:19 AM

事件捕獲和冒泡是DOM中事件傳播的兩個(gè)階段,捕獲是從頂層向下到目標(biāo)元素,冒泡是從目標(biāo)元素向上傳播到頂層。1.事件捕獲通過(guò)addEventListener的useCapture參數(shù)設(shè)為true實(shí)現(xiàn);2.事件冒泡是默認(rèn)行為,useCapture設(shè)為false或省略;3.可使用event.stopPropagation()阻止事件傳播;4.冒泡支持事件委托,提高動(dòng)態(tài)內(nèi)容處理效率;5.捕獲可用于提前攔截事件,如日志記錄或錯(cuò)誤處理。了解這兩個(gè)階段有助于精確控制JavaScript響應(yīng)用戶操作的時(shí)機(jī)和方式。

Java和JavaScript有什么區(qū)別? Java和JavaScript有什么區(qū)別? Jun 17, 2025 am 09:17 AM

Java和JavaScript是不同的編程語(yǔ)言。1.Java是靜態(tài)類型、編譯型語(yǔ)言,適用于企業(yè)應(yīng)用和大型系統(tǒng)。2.JavaScript是動(dòng)態(tài)類型、解釋型語(yǔ)言,主要用于網(wǎng)頁(yè)交互和前端開(kāi)發(fā)。

See all articles