Vue+Element ui上传图片限制图片尺寸

1.引入element-ui upload组件

<el-upload class="avatar-uploader" :headers="myHeaders" :action="上传图片的地址" :show-file-list="false" :on-success="handleAvatarSuccess" :before-upload="beforeAvatarUpload">
	<img v-if="imageUrl" :src="imageUrl" class="avatar" />
	<i v-else class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>

2.在style中 定义el-upload的样式

<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.在methods里 定义限制图片的方法

methods:{
    //图片上传成功的回调函数
    handleAvatarSuccess(res, file) {
		if (file.raw.isFlag && res.code == 0) {
			this.imageUrl = URL.createObjectURL(file.raw);
			this.newBanner_Form.imgUrl = res.data.url;
		}
	},
    //图片上传前的回调函数
	beforeAvatarUpload(file) {
		const isJPG = file.type === "image/jpeg" || file.type === "image/png";
			if (!isJPG) {
				this.$message.error("上传头像图片只能是 JPG和PNG 格式!");
			}
        	//调用[限制图片尺寸]函数
			this.limitFileWH(702, 285, file).then((res) => {
				file.isFlag = res
			})
			return isJPG && file.isFlag;
	},
	//限制图片尺寸
	limitFileWH(E_width, E_height, file) {
		let _this = this;
		let imgWidth = "";
		let imgHight = "";
		const isSize = new Promise(function(resolve, reject) {
			let width = E_width;
			let height = E_height;
			let _URL = window.URL || window.webkitURL;
			let img = new Image();
			img.onload = function() {
				imgWidth = img.width;
				imgHight = img.height;
				let valid = img.width == width && img.height == height;
				valid ? resolve() : reject();
			}
			img.src = _URL.createObjectURL(file);
		}).then(() => {
			return true;
		}, () => {
			_this.$message.warning({
			message: '上传文件的图片大小不合符标准,宽需要为' + E_width + 'px,高需要为' + E_height + 'px。当前上传图片的宽高分别为:' + imgWidth + 'px和' +
							imgHight + 'px',
			btn: false
		})
			return false;
		});
			return isSize
	},
}

4.解决before-upload钩子返回false时,文件仍然上传成功的问题

如果我们在before-upload中直接返回true或者是false,那么它其实也是会上传文件的,因为它也会触发on-change函数。
我这里是采用在对应的函数中返回一个promise来解决的,就像下面这样:

beforeAvatarUpload(file) {
      return new Promise((resolve,reject) => {
        const isJPG = file.type === 'image/jpeg' || file.type === 'image/png';
        if (!isJPG) {
          this.$message.error('上传头像图片只能是 JPG和PNG 格式!');
        }
        //调用[限制图片尺寸]函数
        this.limitFileWH(702, 285, file).then((res) => {
          file.isFlag = res;
        });
        if (file.isFlag) {
          return resolve(true);
        } else {
          return reject(false);
        }
      })
      
    },
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

姜天生i

如果本文对你有所帮助点赞就好~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值