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);
        }
      })
      
    },
  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
Element UI是一个基于Vue.js的桌面端组件库,提供了一系列易用的组件,其中也包括图片管理相关的组件。 Element UI中的图片管理组件主要用于方便地展示、管理和操作图片。它可以满足开发者在后台管理系统或其他需要图片管理的场景中的需求。 Element UI提供了几个核心的图片管理组件,如: 1. 图片上传组件:可以通过简单的配置就实现了图片的上传功能。开发者只需设置上传的路径和一些其他的参数,就可以实现图片的上传,并且在上传过程中可以实时显示上传进度和上传成功后的图片预览。 2. 图片列表组件:该组件可以将已上传的图片以列表的方式展示出来,包括图片的缩略图、名称和一些操作按钮。开发者可以通过组件提供的API来自定义列表的样式,并且可以对列表中的图片进行删除、编辑等操作。 3. 图片轮播组件:该组件可以将多张图片以轮播的方式呈现出来,支持自动播放、轮播方向、切换速度等设置。开发者可以根据具体需求自定义图片的尺寸、样式和轮播效果。 4. 图片裁剪组件:该组件可以根据指定的尺寸对图片进行裁剪,开发者可以通过拖拽、缩放等操作来实现自定义的裁剪效果,并且可以实时预览裁剪后的图片。 Element UI的图片管理组件不仅提供了丰富的功能和灵活的配置选项,还具有良好的兼容性和稳定性。开发者可以根据具体的需求选择合适的组件,并结合自身业务进行定制和扩展。无论是简单的图片上传,还是复杂的图片管理和操作,Element UI的图片管理组件都能够满足开发者的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

姜天生i

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

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

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

打赏作者

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

抵扣说明:

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

余额充值