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代码对上传文件进行处理,将其存储到服务器中。这种方式可以提高用户上传文件的体验,同时也更为安全。