Ajax上傳PHP的簡單實現方法
在我們的網站中,用戶上傳圖片和文件已經成為常態。然而,傳統的上傳方式體驗較差,用戶體驗也不好。這時我們可以通過使用Ajax上傳PHP的方式來改善用戶體驗。本文介紹如何通過Ajax上傳文件。
一、前端HTML代碼
在前端,我們需要制作一個表單來獲取用戶需要上傳的文件,請參考下面的HTML代碼:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Ajax上傳 PHP</title>
<style>
.upload{
width:200px;
height:200px;
margin:100px auto;
border:1px solid gray;
display:flex;
justify-content:center;
align-items:center;
font-size:18px;
color:gray;
}
input[type="file"]{
display:none;
}
</style>
</head>
<body>
<div class="upload">
選擇文件...
<input type="file" name="file" id="file">
</div>
</body>
</html>
這段代碼定義了一個大小為200x200的區域,用于放置“選擇文件...”超鏈接以及實際文件上傳的input元素。當用戶點擊“選擇文件...”時,我們需要觸發一個事件來調出文件選擇窗口。
二、JavaScript代碼
我們需要監聽“選擇文件...”div元素的click事件,并將input元素顯示出來。JavaScript代碼如下:var uploadDiv = document.querySelector(".upload");
var uploadInput = document.querySelector("#file");
uploadDiv.addEventListener("click",function(){
uploadInput.click();
})
uploadInput.addEventListener("change",function(){
//獲取要上傳的文件
var file = this.files[0];
var formData = new FormData();
formData.append("file",file);
//創建ajax對象
var xhr = new XMLHttpRequest();
//監聽ajax狀態
xhr.onreadystatechange = function(){
if(xhr.readyState == 4 && xhr.status == 200){
console.log(xhr.responseText);
}
}
//發送ajax請求(這里的url為處理上傳文件的php文件)
xhr.open("POST","upload.php");
xhr.send(formData);
})
這段代碼中,我們首先獲取了“選擇文件...”div元素和input元素,當用戶點擊“選擇文件...”div元素時,我們觸發了input元素的click事件使其選擇文件。然后,我們監聽了input元素的change事件,在change事件中獲取了要上傳的文件,將其打包成formData對象,然后創建了一個XHR對象,監聽了ajax狀態,最后以POST請求方式發送了ajax請求。需要注意的是,我們的數據是在formData對象中上傳的,而非普通的表單方式。
三、PHP代碼
在PHP中,我們需要對接收到的上傳文件進行處理,將其存儲到服務器中。PHP代碼如下://得到上傳文件的信息
$fileInfo = $_FILES['file'];
//得到上傳文件的名稱
$fileName = $fileInfo['name'];
//得到上傳文件的類型
$fileType = $fileInfo['type'];
//得到上傳文件所在的臨時文件路徑
$filePath = $fileInfo['tmp_name'];
//得到上傳文件的大小
$fileSize = $fileInfo['size'];
//設定文件上傳的路徑及名稱規則
$uploadPath = $_SERVER['DOCUMENT_ROOT'] . '/uploads/';
if (!file_exists($uploadPath)) {
mkdir($uploadPath, 0777, true);
}
$newName = time() . mt_rand(1000, 9999) . strrchr($fileName, '.');
//將臨時文件轉移到指定目錄下
if (move_uploaded_file($filePath, $uploadPath . $newName)) {
echo $newName .'上傳成功';
} else {
echo '上傳失敗';
}
這段代碼中,我們通過$_FILES數組獲取了上傳文件的信息,然后得到了上傳文件的名稱、類型、所在的臨時文件路徑和大小等信息。接著,我們設定了文件上傳的路徑及名稱規則,如果目錄不存在,則創建該目錄。我們使用當前時間戳加上四位隨機數和文件后綴名,作為上傳文件的新名稱。最后,我們將臨時文件轉移到指定目錄下,同時輸出上傳結果。
總結
本文介紹了通過Ajax上傳PHP的方法,通過前端HTML代碼和JavaScript代碼獲取用戶的上傳文件,并將其打包成formData對象上傳到服務器,最后通過PHP代碼對上傳文件進行處理,將其存儲到服務器中。這種方式可以提高用戶上傳文件的體驗,同時也更為安全。