vue+ajax+php 实现多图片上传并回显
时间: 2023-07-29 17:10:54 浏览: 263
Vue+elementUI实现多图片上传与回显功能(含回显后继续上传或删除)
要实现vue+ajax+php的多图片上传并回显,可以按照以下步骤进行:
1.在前端使用Vue的上传组件,设置multiple属性为true,允许用户上传多张图片。
2.在上传组件的change事件中获取用户选择的图片文件,使用FormData对象将图片文件封装成表单数据。
3.使用axios或其他网络请求库将表单数据发送到服务器端。
4.在服务器端接收到表单数据后,解析出图片文件并保存到服务器的指定文件夹中。
5.将图片文件的URL返回给前端,用于回显图片。
下面是一个简单的示例代码:
前端代码:
```html
<template>
<div>
<input type="file" ref="fileInput" @change="handleUploadChange" multiple>
<button @click="uploadImages">上传图片</button>
<div v-if="imageUrls.length > 0">
<div v-for="imageUrl in imageUrls" :key="imageUrl">
<img :src="imageUrl" style="width: 200px; height: 200px;">
</div>
</div>
</div>
</template>
<script>
import axios from 'axios'
export default {
data () {
return {
imageFiles: [],
imageUrls: []
}
},
methods: {
handleUploadChange () {
this.imageFiles = Array.from(this.$refs.fileInput.files)
},
uploadImages () {
const formData = new FormData()
this.imageFiles.forEach(file => {
formData.append('images[]', file)
})
axios.post('/api/upload_images.php', formData)
.then(response => {
this.imageUrls = response.data.imageUrls
})
.catch(error => {
console.log(error)
})
}
}
}
</script>
```
后端代码(使用PHP):
```php
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$imageUrls = [];
$uploadDir = '/path/to/upload/folder/';
foreach ($_FILES['images']['error'] as $key => $error) {
if ($error === UPLOAD_ERR_OK) {
$tmpName = $_FILES['images']['tmp_name'][$key];
$fileName = basename($_FILES['images']['name'][$key]);
$uploadPath = $uploadDir . $fileName;
move_uploaded_file($tmpName, $uploadPath);
$imageUrls[] = '/upload/' . $fileName;
}
}
header('Content-Type: application/json');
echo json_encode(['imageUrls' => $imageUrls]);
}
```
在上面的示例代码中,使用了PHP的$_FILES变量来获取上传的图片文件。通过遍历$_FILES['images']['error']数组,可以判断每个文件是否上传成功。如果上传成功,将文件移动到指定的上传目录中,并将文件的URL保存到$imageUrls数组中。最后,将$imageUrls数组以JSON格式返回给前端,用于回显图片。
需要注意的是,上传文件时需要确保服务器端的上传目录有写入权限,否则会导致上传失败。同时,需要对上传的文件进行安全性检查,防止上传恶意文件。
阅读全文