1. HTML结构搭建
<div>
<input type="file" id="uploadImage" @change="handleImageChange" accept="image/*" />
<div v-if="imageUrl">
<img :src="imageUrl" alt="Uploaded Image" style="max-width: 300px; max-height: 300px;" />
</div>
</div>
2. Vue数据绑定
data() {
return {
imageUrl: ''
};
}
3. 处理文件选择事件
methods: {
handleImageChange(event) {
const file = event.target.files[0];
if (file) {
const reader = new FileReader();
reader.onload = (e) => {
this.imageUrl = e.target.result;
};
reader.readAsDataURL(file);
}
}
}
这段代码创建了一个FileReader
对象,它会在读取文件内容时触发onload
事件。当文件读取完成时,result
属性包含了文件的DataURL,这个URL可以被用来设置img标签的src
属性。
4. 图片预览
5. 表单提交
methods: {
// ...其他方法
uploadImage() {
const formData = new FormData();
formData.append('image', this.$refs.uploadImage.files[0]);
// 使用axios发送请求
axios.post('/upload', formData, {
headers: {
'Content-Type': 'multipart/form-data'
}
})
.then(response => {
console.log('图片上传成功', response);
})
.catch(error => {
console.error('图片上传失败', error);
});
}
}
在这个方法中,我们创建了一个FormData
对象,并将用户选择的文件添加到它中。然后,我们使用axios库(需要先安装)来发送一个POST请求到服务器。