element ui 上传图片(格式,大小,尺寸) (二次无法上传问题) 完整
<el-upload
ref="upload"
class="avatar-uploader"
:action="action"
:limit="1"
:show-file-list="false"
:before-upload="beforeAvatarUpload"
:on-success="handleAvatarSuccess"
:headers="{ accessToken: token }">
<img v-if="imageUrl" :src="imageUrl" class="avatar" />
<i v-else class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>
handleAvatarSuccess(res, file, fileList) {
// 解决上传文件只能上传一次 ,第二次后无反应的问题的坑(浏览器还保存着我们已经上传的文件)
this.$refs.upload.clearFiles()
this.imageUrl = res.data
},
beforeAvatarUpload(file) {
const isTypeTrue = /^image\/(jpeg|png|jpg)$/.test(file.type);
const isLt2M = file.size / 1024 / 1024 < 2
if(!isTypeTrue) {
this.$message.error('请上传指定格式图片')
}
if (!isLt2M) {
this.$message.error('请上传大小在2M内的图片')
}
// 限制尺寸
let _this = this
const isSize = new Promise(function (resolve, reject) {
let width = this.width // 限制图片尺寸
let height = this.height
// URL对象是硬盘(SD卡等)指向文件的一个路径
let _URL = window.URL || window.webkitURL
let img = new Image()
//设置src才能取到图片宽高等属性
img.src = _URL.createObjectURL(file)
img.onload = function () {
let valid = img.width === width && img.height === height
valid ? resolve() : reject()
}
}).then(() => {
return file
}, () => {
_this.$message.error(`上传图片与要求尺寸不符,请重新上传`)
return Promise.reject()
});
return isTypeTrue && isLt2M && isSize
},