PHP Ajax實現無重新整理附件上傳的方法

來源:互聯網
上載者:User
這篇文章為大家詳細主要介紹了PHP Ajax實現無重新整理附件上傳功能的具體代碼,具有一定的參考價值,感興趣的小夥伴們可以參考一下

對一個網站而言,有一個基本的不可缺少的功能,那就是檔案上傳。使用PHP預壓來實現檔案上傳可謂是有得天獨厚的優勢的,那麼今天,就一起來做一個關於無重新整理實現的檔案上傳吧。

--------------------------------------------------------------------------------

普通表單

前端頁面

<form action="./fileupload.php" method="POST"><p>Username<input type="text" name="username" /></p><p>Password<input type="password" name="password" /></p><p>E-mail<input type="text" name="email" /></p><input type="submit" value="Register" /></form>

幕後處理

print_r($_POST);$username = $_POSY['username'];$password = $_POST['password'];$email = $_POST['email'];// 在伺服器上和資料庫內容資訊對比即可,實現相關的商務邏輯。

···

帶有檔案的表單

帶有檔案的表單和普通表單是有很大的區別的,首先我們要在表單上聲明一個屬性,如下:

<form enctype='multipart/form-data'>

來告訴伺服器,我們上傳的表單包含有檔案資訊。

重新整理方式

談到重新整理模式,也就是點擊完submit之後,頁面跳轉到業務處理介面。這也是我們普通方式實現的表單的資料提交。

前端介面

<form action="./fileupload.php" enctype="multipart/form-data" method="post"><p>Username<input type="text" name="username" /></p><p>Password<input type="password" name="password" /></p><p>E-mail<input type="text" name="email" /></p><p>Photo<input type="file" name="photo" /></p><input type="submit" value="Register" />

後台頁面

幕後處理除了普通的表單資料之外,最重要的是處理檔案資訊。PHP內建了一個函數,可以方便的把上傳過來的檔案從臨時的資料區轉移到我們的目標檔案夾,實現上傳的商務邏輯。

move_uploaded_file('臨時檔案路徑','目標檔案路徑');

無重新整理方式

使用無重新整理方式,與使用重新整理方式的唯一的區別就是阻止了頁面的跳轉,我們通常會有兩種方式來實現。
•在表單提交事件的末尾加上return false。

<script>var form = document.getElementsByTagName('form')[0];form.onsubmit = function(){  // to do something  ···  // 阻止頁面跳轉  return false;}</script>

•使用h5相關方式。

<script>var form = document.getElementsByTagName('form')[0];form.onsubmit = function(event){  // to do something  ···  // 阻止頁面跳轉  event.preventDefault();}</script>

其他的操作處理與帶跳轉的保持一致即可。

大檔案上傳

雖然PHP實現其檔案上傳很方便,也很快速。但是上傳檔案的大小並不是無限制的。預設來說,有兩個因素會限制我們上傳檔案的大小。
•post的極值
•upload的極值
我們可以通過手動的更改php.ini配置資訊來實現上傳檔案大小的控制。

POST極值

post_max_size = 200M

upload極值

upload_max_filesize=200M

上傳細節

ajax對象有一個叫upload的屬性,而且upload也作為一個對象而存在。其擁有一個叫onprogress的方法,我們可以通過監測這個方法,來查看檔案上傳過程中的百分比。

前端頁面

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>檔案上傳樣本</title><script>  window.onload = function(){    var form = document.getElementsByTagName("form")[0];    form.onsubmit = function(evt){      // 收集表單資訊      var fd = new FormData(form);      var ajax = new XMLHttpRequest();      // 給Ajax設定檔案上傳的感知事件      ajax.upload.onprogress = function(evt){        var loaded = evt.loaded;        var total = evt.total;        document.getElementById("progress").value =(loaded/total)*100;      }      ajax.onreadystatechange = function() {        if(ajax.readyState==4){          alert(ajax.responseText);        }      }      ajax.open('post','./fileupload.php');      ajax.send(fd);      // 阻止瀏覽器的跳轉      evt.preventDefault();      //return false;    }      }</script></head><body><h2>無重新整理方式上傳附件</h2><form action="./fileupload.php"><p>Username<input type="text" name="username" /></p><p>Password<input type="password" name="password" /></p><p>E-mail<input type="text" name="email" /></p><p>Photo<input type="file" name="photo" /></p><!--設定進度條--><style>  #parent {width:300px;height:34px;border:1px solid #033;}  #son {width:100%;height:10%;background-color:green}  progress {width:100%;height:34px;}</style><p id="parent">  <p id="son">    <progress id="progress">  </p></p><input type="submit" value="Register" /></form></body></html>

幕後處理

<?php//print_r($_POST);//echo "---------------------"."<BR>";//print_r($_FILES);// 附件的儲存位置、附件的名字,記得一定要存在upload檔案夾$path = "../upload/";// 擷取檔案的原始名稱$origin_name = $_FILES['photo']['name'];// 拼接成該檔案在伺服器上的名稱$server_name = $path.$origin_name;if($_FILES['photo']['error']>0) {  die("出錯了!".$_FILES['photo']['error']); }if(move_uploaded_file($_FILES['photo']['tmp_name'],$server_name)){  echo "<BR>"."Upload Success!";}else{  echo "<BR>"."Upload Failed!".$_FILES['photo']['error'];  }?>

記得保證upload檔案夾的存在性以及路徑問題。

總結

檔案上傳是一個很基礎的功能,實現起來也不是很複雜。但是這個功能卻又是那麼的重要,我們可以方便的通過檔案上傳來配合修改使用者的諸如頭像,以及其他檔案資訊。

以上就是本篇文的全部內容,希望能對大家的學習有所協助。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.