ajax上傳文件是web開發中常用的一種技術。通過ajax上傳文件可以使頁面在不刷新的情況下將文件上傳到服務器,并且可以在上傳過程中實時地顯示上傳進度。今天,我們將介紹ajax上傳文件到php程序的流程和注意事項。
首先,我們需要知道的是,通過ajax上傳文件的過程需要用到FormData對象。FormData是XMLHttpRequest Level 2中的一個新對象,用于將表單數據以鍵值對的形式存儲,并將其提交給服務器。FormData除了可以上傳文件,還能上傳普通表單域。
提交文件的html代碼如下:其中,文件上傳域的name屬性值必須為“file”,這是后續在php程序中獲取文件的關鍵。注意:如果在ajax上傳的過程中需要附帶其他表單元素,則表單元素的name值也應該設置為與服務器端對應表單元素的name值一致。
下面是ajax上傳文件的代碼:
$('#uploadForm').submit(function(e) { e.preventDefault(); var formData = new FormData(); formData.append('file', $('#file')[0].files[0]); $.ajax({ url: 'upload.php', type: 'POST', data: formData, cache: false, processData: false, contentType: false, xhr: function() { var xhr = $.ajaxSettings.xhr(); xhr.upload.addEventListener('progress', function(evt) { if(evt.lengthComputable) { var percentComplete = evt.loaded / evt.total; percentComplete = parseInt(percentComplete * 100); //實時顯示上傳進度 } else { //不支持evt.lengthComputable } }, false); return xhr; }, success: function(data) { //上傳成功后的回調函數 }, error: function(xhr, textStatus, errorThrown) { //上傳失敗后的回調函數 } }); });其中,代碼中的FormData對象用于存儲上傳文件,ajax中的cache、processData、contentType三個參數為文件上傳默認參數,其中xhr函數用于實時顯示上傳進度。 如果php程序中需要處理ajax上傳的文件,則需要使用$_FILES數組,如下所示:
$fileName = $_FILES['file']['name']; // 獲取上傳文件名 $fileTempName = $_FILES['file']['tmp_name']; //獲取上傳文件的臨時文件名 move_uploaded_file($fileTempName, 'upload/' . $fileName); //將文件移動到指定目錄注意:可能會出現上傳文件失敗的情況。此時可以查看php.ini配置文件中的upload_max_filesize和post_max_size兩個參數,如果上傳的文件大小超出了這兩個參數的限制,則上傳會失敗。 以上是ajax上傳文件到php程序的流程和注意事項。如果需要上傳多個文件,則可以將FormData對象中的append方法調用多次,分別將每一個文件添加到FormData對象中,上傳文件時可以使用formData.getAll()方法獲取所有上傳的文件信息。我們應該根據實際需要選擇合適的上傳方案,讓用戶有更好的上傳體驗。
下一篇css3 光圈效果