ajax與html5實現非同步檔案上傳

來源:互聯網
上載者:User

                                    ajax與html5實現非同步檔案上傳

       在之前的兩篇文章中,分別介紹了XMLHttpRequest對象和iframe偽非同步檔案上傳。在此就不再介紹介紹XMLHttpRequest對象了。之前說,單憑ajax是無法實現檔案上傳的,原因是js不能操作主機的硬碟來擷取檔案。但是隨著個瀏覽器商家逐步支援HTML5(實現了對ajax非同步上傳檔案的支援),ajax非同步檔案上傳變得可能。

       ajax非同步上傳思路

      1.在html5中為檔案上傳的標籤<input type='file' name='' /> 的dom添加一個files檔案清單對象,通過它我們可以在js中擷取檔案的

        資訊和二進位資源。

      2.在XMLHttpRequest的2版中添加了 FormData對象,來載入表單提交索引值對。也可以用來負載檔案資源。

      3.ajax非同步上傳檔案,並且通過自身非同步回呼函數來實現後台上傳檔案的提示資訊顯示和反饋。

前台檔案upload.html全部代碼如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><head>    <title>ajax非同步檔案上傳</title>    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />    <meta name="description" content="" />    <meta name="keywords" content="" />    <script type="text/javascript">     function createXHR() {    var xhr=null;   if(window.XMLHttpRequest)  //要是支援XMLHttpRequest的則採用XMLHttpRequest產生對象      xhr=new XMLHttpRequest();   else if(window.ActiveXobject)//要是支援win的ActiveXobject則採用ActiveXobject產生對象。     xhr=new ActiveXobject('Microsoft.XMLHTTP');    return xhr; }  function ajax_upload() {   var xhr=createXHR();   var formData=new FormData();   var file=document.getElementsByTagName('input')[0].files[0];//擷取檔案清單中的第一個檔案,html5中支援多個檔案上傳   var info='檔案名稱:'+file.name+' 檔案類型:'+file.type+' 檔案大小:'+file.size;//擷取檔案的資訊   var showInfo=document.getElementById('showinfo');   showInfo.innerHTML=info;   formData.append('pic',file);//載入圖片檔案   xhr.open('POST','./move_file.php',true);   xhr.send(formData);   xhr.onreadystatechange=function(){     if( this.readyState==4 && this.status==200) {    showInfo.innerHTML=showInfo.innerHTML+'<br />'+this.responseText;//將後台提示資訊放到指定div中顯示 }       } }    </script></head><body> <input type='file' name='pic' /> <input type='button' value='提交'onclick='ajax_upload();'/> <div id='showinfo'></div></body>

後台檔案move_file.php全部代碼如下:

<?phpif(empty($_FILES))die('上傳為空白檔案');if($_FILES['pic']['error']!=0)die('檔案上傳出錯');move_uploaded_file($_FILES['pic']['tmp_name'],'./'.$_FILES['pic']['name']);echo '檔案上傳成功。';?>

截圖如下:




相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.