php 下 html5 XHR2 + FormData + File API 上傳文件操作實(shí)例分析
本文實(shí)例講述了php 下 html5 XHR2 + FormData + File API 上傳文件操作。分享給大家供大家參考,具體如下:
FormData的作用:
FormData對象可以幫助我們自動的打包表單數(shù)據(jù),通過XMLHttpRequest的send()方法來提交表單。當(dāng)然FormData也可以動態(tài)的append數(shù)據(jù)。FormData的最大優(yōu)點(diǎn)就是我們可以異步上傳一個(gè)二進(jìn)制文件。
例1如下:
<!DOCTYPE HTML> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <form method="post" id="myForm" onsubmit="return post();"> 用戶名<input type="text" name="uname" /> 密碼<input type="password" name="upwd" /> 郵箱<input type="text" name="uemail" /> <input type="submit" name="submit" value="提交" /> </form> </body> <script type="text/javascript"> function post() { var myForm = document.getElementById("myForm"); //FormData既可以從表單讀取數(shù)據(jù),也可以動態(tài)append(鍵,值)添加 var fd = new FormData(myForm); var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function () { if (xhr.readyState == 4) { alert(this.responseText); } }; xhr.open("post", "post.php", true); xhr.send(fd); return false; } </script> </html>
File API
使用HTML5 DOM新增的File API,現(xiàn)在可以讓網(wǎng)頁要求用戶選擇本地文件,并且讀取這些文件的信息了。
通過File API,我們可以在用戶選取一個(gè)或者多個(gè)文件之后,訪問到代表了所選文件的一個(gè)或多個(gè)File對象,這些對象被包含在一個(gè)FileList對象中。
<!DOCTYPE HTML> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <form method="post" id="myForm"> <input type="file" name="file" id="upfile" /> <input type="submit" name="submit" value="提交" /> </form> </body> <script type="text/javascript"> var upfile = document.getElementById("upfile"); upfile.onchange = function() { var file = this.files[0]; alert("文件名:" + file.name + "\r\n" + "大小:" + file.size + "\r\n"); }; </script> </html>
我們通過FormData + File API 上傳文件
<!DOCTYPE HTML> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <form method="post" id="myForm"> <input type="file" name="file" id="upfile" /> <input type="submit" name="submit" value="提交" /> </form> </body> <script type="text/javascript"> var myForm = document.getElementById("myForm"); var upfile = document.getElementById("upfile"); myForm.onsubmit = function() { //我們創(chuàng)建一個(gè)FormData對象 var fd = new FormData(); var file = upfile.files[0]; //把文件添加到FormData對象中 fd.append("file", file); var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function () { if (xhr.readyState == 4) { alert(this.responseText); } }; xhr.open("post", "upfile.php", true); //發(fā)送FormData對象 xhr.send(fd); return false; }; </script> </html>
upfile.php代碼如下:
<?php $uploadDir = './upload/'; if(!file_exists($uploadDir)) { @mkdir($uploadDir, 0777, true); } $uploadFile = $uploadDir . basename($_FILES['file']['name']); if(move_uploaded_file($_FILES['file']['tmp_name'], $uploadFile)) { echo "OK"; } else { echo "NO"; }
使用對象URL來顯示你所選擇的圖片
通過window.URL.createObjectURL()和 window.URL.revokeObjectURL()兩個(gè)DOM方法。
這兩個(gè)方法創(chuàng)建簡單的URL字符串對象,用于指向任何 DOM File 對象數(shù)據(jù),包括用戶電腦中的本地文件。
<!DOCTYPE HTML> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <form method="post" id="myForm"> <input type="file" name="file" id="upfile" /> <input type="submit" name="submit" value="提交" /> </form> </body> <script type="text/javascript"> var myForm = document.getElementById("myForm"); var upfile = document.getElementById("upfile"); upfile.onchange = function() { //創(chuàng)建一個(gè)img標(biāo)簽 var img = document.createElement("img"); //通過file對象創(chuàng)建對象URL img.src = window.URL.createObjectURL(this.files[0]); img.height = 60; img.onload = function() { //釋放對象URL window.URL.revokeObjectURL(this.src); }; document.body.appendChild(img); }; myForm.onsubmit = function() { //我們創(chuàng)建一個(gè)FormData對象 var fd = new FormData(); var file = upfile.files[0]; //把文件添加到FormData對象中 fd.append("file", file); var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function () { if (xhr.readyState == 4) { alert(this.responseText); } }; xhr.open("post", "upfile.php", true); //發(fā)送FormData對象 xhr.send(fd); return false; }; </script> </html>
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php文件操作總結(jié)》、《PHP目錄操作技巧匯總》、《PHP常用遍歷算法與技巧總結(jié)》、《PHP數(shù)據(jù)結(jié)構(gòu)與算法教程》、《php程序設(shè)計(jì)算法總結(jié)》及《PHP網(wǎng)絡(luò)編程技巧總結(jié)》
希望本文所述對大家PHP程序設(shè)計(jì)有所幫助。
相關(guān)文章
php從數(shù)據(jù)庫查詢結(jié)果生成樹形列表的方法
這篇文章主要介紹了php從數(shù)據(jù)庫查詢結(jié)果生成樹形列表的方法,涉及php操作html元素生成樹形列表的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04php使用Jpgraph繪制復(fù)雜X-Y坐標(biāo)圖的方法
這篇文章主要介紹了php使用Jpgraph繪制復(fù)雜X-Y坐標(biāo)圖的方法,通過設(shè)置圖像陰影、邊距、字體、顏色、曲線等實(shí)現(xiàn)Jpgraph繪制復(fù)雜坐標(biāo)圖的功能,非常簡單實(shí)用,需要的朋友可以參考下2015-06-06PHP實(shí)現(xiàn)在數(shù)據(jù)庫百萬條數(shù)據(jù)中隨機(jī)獲取20條記錄的方法
這篇文章主要介紹了PHP實(shí)現(xiàn)在數(shù)據(jù)庫百萬條數(shù)據(jù)中隨機(jī)獲取20條記錄的方法,涉及php簡單數(shù)據(jù)庫查詢與隨機(jī)數(shù)操作相關(guān)技巧,需要的朋友可以參考下2017-04-04比較全的PHP 會話(session 時(shí)間設(shè)定)使用入門代碼
由于 Session 是以文本文件形式存儲在服務(wù)器端的,所以不怕客戶端修改 Session 內(nèi)容。實(shí)際上在服務(wù)器端的 Session 文件,PHP 自動修改 Session 文件的權(quán)限,只保留了系統(tǒng)讀和寫權(quán)限,而且不能通過 ftp 修改,所以安全得多。2008-06-06php中隨機(jī)函數(shù)mt_rand()與rand()性能對比分析
這篇文章主要介紹了php中隨機(jī)函數(shù)mt_rand()與rand()性能對比分析,較為詳細(xì)的分析了兩個(gè)函數(shù)的具體用法,并以實(shí)例形式分析了在不同平臺下的運(yùn)行效率問題,需要的朋友可以參考下2014-12-12