一、使用input标签读取本地图片
通过input标签的type属性设置为file,可以在网页上弹出系统文件选择对话框,用户可以从本地选择所需要的图片,然后可以通过FileReader对象将文件转换成Data URL。Vue框架可以通过v-bind绑定到img标签上实现图片的预览。
<input type="file" @change="handleFileChange">
<script>
export default {
data () {
return {
imageUrl: ''
}
},
methods: {
handleFileChange (e) {
const file = e.target.files[0]
const reader = new FileReader()
reader.readAsDataURL(file)
reader.onload = e => {
this.imageUrl = e.target.result
}
}
}
}
</script>
二、使用filepond插件实现图片上传
FilePond是一个轻量级的JavaScript插件,用于文件上传和管理。FilePond支持多种文件上传方式,包括拖放、粘贴、文件选择等。在Vue项目中安装FilePond,然后使用vue-filepond组件即可实现文件上传和图片预览功能。
<script>
import vueFilePond from 'vue-filepond'
import 'filepond/dist/filepond.min.css'
import FilePondPluginFileValidateType from 'filepond-plugin-file-validate-type'
import FilePondPluginImagePreview from 'filepond-plugin-image-preview'
import 'filepond-plugin-image-preview/dist/filepond-plugin-image-preview.css'
import FilePondPluginImageResize from 'filepond-plugin-image-resize'
export default {
components: {
filePond: vueFilePond(FilePondPluginFileValidateType, FilePondPluginImagePreview, FilePondPluginImageResize)
},
data () {
return {
files: []
}
}
}
</script>
三、使用axios上传图片到后台服务器
在Vue项目中通过axios库,可以将图片上传到服务器。可以在Vue项目中编写上传图片的方法,然后通过axios.post方法将图片数据发送到服务器进行保存。
<input type="file" @change="handleFileUpload">
<script>
import axios from 'axios';
export default {
data() {
return {
file: null
}
},
methods: {
handleFileUpload(event) {
this.file = event.target.files[0];
},
uploadPhoto() {
let formData = new FormData();
formData.append('image', this.file);
axios.post('http://localhost:3000/upload', formData, {
headers: {
'Content-Type': 'multipart/form-data'
}
}).then(() => {
console.log('上传成功')
}).catch(() => {
console.log('上传失败')
});
}
}
}
</script>
四、使用vue-cropper组件实现图片裁剪
在Vue项目中使用vue-cropper插件可以方便的实现图片的裁剪功能。使用vue-cropper可以让用户自行选择并调整图片的大小,将所需要的部分裁剪出来保存。
<script>
import VueCropper from 'vue-cropper'
export default {
components: {
VueCropper
},
data () {
return {
image: 'image.jpg',
cropData: null,
croppedImage: null,
cropperOptions: {
viewMode: 1,
dragMode: 'move',
aspectRatio: 1 / 1,
cropBoxResizable: false,
guides: false,
crop: () => {
this.cropData = JSON.stringify(this.$refs.cropper.getCropBoxData())
}
}
}
}
}
</script>
五、使用element-ui组件库实现图片上传
在Vue项目中使用element-ui组件库的Upload组件可以方便的实现图片的上传功能。element-ui的Upload组件提供了多种上传方式,并支持进度条、文件类型等功能。
选取文件
上传到服务器
写入数据库
只能上传jpg/png文件,且不超过500kb
<script>
export default {
data() {
return {
fileList: []
};
},
methods: {
handlePreview(file) {
console.log(file);
},
handleRemove(file, fileList) {
console.log(file, fileList);
},
handleSuccess(response, file, fileList) {
console.log(response, file, fileList);
},
submitUpload(type) {
this.$refs.upload.submit();
}
}
}
</script>