帮我写PHP+html上传多图代码并且在线预览,删除,更换UI要漂亮,不要表单提交
时间: 2023-07-15 22:12:37 浏览: 86
基于jQuery的多图上传预览代码
好的,这里是一个简单的 PHP 和 HTML 代码实现多图上传并在线预览、删除、更换的示例:
1. HTML 部分
```html
<!DOCTYPE html>
<html>
<head>
<title>多图上传</title>
<style>
/* 样式可根据需求自定义 */
.container {
margin: 20px auto;
width: 600px;
border: 1px solid #ccc;
padding: 20px;
border-radius: 8px;
}
.preview {
display: inline-block;
margin-right: 10px;
margin-bottom: 10px;
position: relative;
}
.preview img {
max-width: 200px;
max-height: 200px;
}
.preview .delete {
position: absolute;
top: 5px;
right: 5px;
color: #fff;
background-color: #f00;
padding: 2px 5px;
border-radius: 5px;
cursor: pointer;
}
#file {
display: none;
}
#upload-btn {
display: block;
margin-top: 10px;
padding: 6px 12px;
background-color: #007bff;
color: #fff;
border: none;
border-radius: 5px;
cursor: pointer;
}
</style>
</head>
<body>
<div class="container">
<div class="upload">
<label for="file" id="upload-btn">选择图片</label>
<input type="file" id="file" multiple>
</div>
<div class="preview-container"></div>
</div>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="upload.js"></script>
</body>
</html>
```
2. PHP 部分
```php
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$files = $_FILES['files'];
$file_count = count($files['name']);
$upload_path = 'uploads/';
for ($i = 0; $i < $file_count; $i++) {
$file_name = $files['name'][$i];
$file_tmp = $files['tmp_name'][$i];
$file_type = $files['type'][$i];
$file_size = $files['size'][$i];
// 获取文件扩展名
$file_ext = strtolower(pathinfo($file_name, PATHINFO_EXTENSION));
// 生成唯一文件名
$new_file_name = uniqid() . '.' . $file_ext;
$upload_file = $upload_path . $new_file_name;
// 将文件移动到指定目录
if (move_uploaded_file($file_tmp, $upload_file)) {
$files_arr[] = [
'name' => $new_file_name,
'url' => $upload_file,
'type' => $file_type,
'size' => $file_size
];
}
}
// 返回上传成功的文件信息
echo json_encode(['status' => 1, 'message' => '上传成功', 'data' => $files_arr]);
exit();
}
// 删除文件
if ($_SERVER['REQUEST_METHOD'] == 'DELETE') {
$file_name = $_GET['name'];
$file_path = 'uploads/' . $file_name;
if (file_exists($file_path)) {
unlink($file_path);
echo json_encode(['status' => 1, 'message' => '删除成功']);
exit();
} else {
echo json_encode(['status' => 0, 'message' => '文件不存在']);
exit();
}
}
```
3. JavaScript 部分
```javascript
$(function() {
var $fileInput = $('#file');
var $uploadBtn = $('#upload-btn');
var $previewContainer = $('.preview-container');
// 文件选择后触发上传
$fileInput.on('change', function() {
var files = this.files;
var formData = new FormData();
for (var i = 0; i < files.length; i++) {
formData.append('files[]', files[i]);
}
// 发送 ajax 上传请求
$.ajax({
url: 'upload.php',
type: 'POST',
data: formData,
dataType: 'json',
contentType: false,
processData: false,
success: function(res) {
if (res.status === 1) {
previewFiles(res.data);
} else {
alert(res.message);
}
},
error: function(err) {
alert('上传失败,请稍后重试');
}
});
});
// 预览文件
function previewFiles(files) {
$previewContainer.html('');
for (var i = 0; i < files.length; i++) {
var file = files[i];
var $preview = $('<div class="preview"></div>');
var $deleteBtn = $('<span class="delete">删除</span>');
var $img = $('<img src="' + file.url + '">');
$deleteBtn.on('click', function() {
deleteFile(file.name);
});
$preview.append($deleteBtn);
$preview.append($img);
$previewContainer.append($preview);
}
}
// 删除文件
function deleteFile(fileName) {
$.ajax({
url: 'upload.php?name=' + fileName,
type: 'DELETE',
dataType: 'json',
success: function(res) {
if (res.status === 1) {
alert('删除成功');
location.reload();
} else {
alert(res.message);
}
},
error: function(err) {
alert('删除失败,请稍后重试');
}
});
}
});
```
4. CSS 部分
```css
/* 样式可根据需求自定义 */
.container {
margin: 20px auto;
width: 600px;
border: 1px solid #ccc;
padding: 20px;
border-radius: 8px;
}
.preview {
display: inline-block;
margin-right: 10px;
margin-bottom: 10px;
position: relative;
}
.preview img {
max-width: 200px;
max-height: 200px;
}
.preview .delete {
position: absolute;
top: 5px;
right: 5px;
color: #fff;
background-color: #f00;
padding: 2px 5px;
border-radius: 5px;
cursor: pointer;
}
#file {
display: none;
}
#upload-btn {
display: block;
margin-top: 10px;
padding: 6px 12px;
background-color: #007bff;
color: #fff;
border: none;
border-radius: 5px;
cursor: pointer;
}
```
这里的实现方式是使用 AJAX 发送上传请求,返回上传成功的文件信息后,在页面中动态生成预览图,并提供删除功能。需要注意的是,删除功能需要使用 DELETE 请求方式,因此需要在 PHP 中进行处理。另外,样式部分可以根据需求进行自定义。
阅读全文