引言
前端准备
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="image" />
<input type="submit" value="上传图片" />
</form>
在这个表单中,enctype="multipart/form-data" 是关键属性,它允许我们上传文件。
后端处理
<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["image"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file, PATHINFO_EXTENSION));
// 检查文件是否为图片
if(isset($_POST["submit"])) {
$check = getimagesize($_FILES["image"]["tmp_name"]);
if($check !== false) {
echo "文件是一个图片 - " . $check["mime"] . ".";
$uploadOk = 1;
} else {
echo "文件不是一个图片.";
$uploadOk = 0;
}
}
// 检查文件是否已存在
if (file_exists($target_file)) {
echo "文件已存在。";
$uploadOk = 0;
}
// 检查文件大小
if ($_FILES["image"]["size"] > 500000) {
echo "文件太大。";
$uploadOk = 0;
}
// 允许特定格式的图片
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
echo "不支持的文件格式。";
$uploadOk = 0;
}
// 检查是否有错误发生
if ($uploadOk == 0) {
echo "文件没有被上传。";
// 如果一切顺利,尝试上传文件
} else {
if (move_uploaded_file($_FILES["image"]["tmp_name"], $target_file)) {
echo "文件 " . htmlspecialchars(basename( $_FILES["image"]["name"])). " 已成功上传。";
} else {
echo "文件上传失败。";
}
}
?>
高效上传技巧
使用分片上传:对于大文件上传,可以考虑使用分片上传技术,将大文件分割成多个小文件片段进行上传,提高上传效率。
异步上传:使用JavaScript和AJAX技术实现异步上传,提升用户体验。
上传频率:为了防止滥用,可以用户上传的频率和数量。