一 前端上传组件参考
https://element.eleme.cn/2.4/#/zh-CN/component/upload
二 前端整合上传组件
1 定义页面组件模板
src/views/teacher/form.vue
<!-- 讲师头像 -->
<el-form-item label="讲师简介">
<el-upload
:show-file-list="false"
:on-success="handleAvatarSuccess"
:on-error="handleAvatarError"
:before-upload="beforeAvatarUpload"
class="avatar-uploader"
action="http://localhost:8120/admin/oss/file/upload?module=avatar">
<img v-if="teacher.avatar" :src="teacher.avatar" class="avatar">
<i v-else class="el-icon-plus avatar-uploader-icon"/>
</el-upload>
</el-form-item>
2 css参考官网
<style>
.avatar-uploader .el-upload {
border: 1px dashed #d9d9d9;
border-radius: 6px;
cursor: pointer;
position: relative;
overflow: hidden;
}
.avatar-uploader .el-upload:hover {
border-color: #409EFF;
}
.avatar-uploader-icon {
font-size: 28px;
color: #8c939d;
width: 178px;
height: 178px;
line-height: 178px;
text-align: center;
}
.avatar {
width: 178px;
height: 178px;
display: block;
}
</style>
3 定义页面组件脚本
// 文件上传成功
handleAvatarSuccess(response) {
if (response.success) {
this.teacher.avatar = response.data.url
// 强制重新渲染
this.$forceUpdate()
} else {
this.$message.error('服务器原因导致上传失败!')
}
},
// 文件上传失败(http)
handleAvatarError() {
this.$message.error('网络原因导致文件上传失败!')
},
// 文件上传前的校验
beforeAvatarUpload(file) {
const isJPG = file.type === 'image/jpeg' // MIME
const isLt2M = file.size / 1024 / 1024 < 2
if (!isJPG) {
this.$message.error('上传头像图片只能是 JPG 格式!')
}
if (!isLt2M) {
this.$message.error('上传头像图片大小不能超过 2MB!')
}
return isJPG && isLt2M
}