ElementUI——el-upload上传前校验图片宽高

简介: ElementUI——el-upload上传前校验图片宽高

前言

总要写点东西吧,最近忙于项目,github上的问题也没处理,博客也没咋写,自媒体上的东西也没咋发,随手记录一下当前项目改造时候遇到的问题吧;

upload: https://element.eleme.cn/#/zh-CN/component/upload

内容

before-upload

借助于:before-upload来进行校验,使用FileReaderImage来获取图片宽高,为了让代码更通用,我们可以进行以下的封装;

getImageSize(file) {
      return new Promise((resolve, reject) => {
        const reader = new FileReader()
        reader.onload = e => {
          const image = new Image()
          image.onload = () => {
            resolve({
              width: image.width,
              height: image.height
            })
          }
          image.src = e.target.result
        }
        reader.readAsDataURL(file)
      })
    },

伪代码

<el-upload
  action="https://jsonplaceholder.typicode.com/posts/"
  list-type="picture-card"
  :on-preview="handlePictureCardPreview"
  :before-upload="beforeProductImageUpload"
  :on-remove="handleRemove">
  <i class="el-icon-plus"></i>
</el-upload>
<el-dialog :visible.sync="dialogVisible">
  <img width="100%" :src="dialogImageUrl" alt="">
</el-dialog>
<script>
  export default {
    data() {
      return {
        dialogImageUrl: '',
        dialogVisible: false
      };
    },
    methods: {
      handleRemove(file, fileList) {
        console.log(file, fileList);
      },
      handlePictureCardPreview(file) {
        this.dialogImageUrl = file.url;
        this.dialogVisible = true;
      },
      beforeProductImageUpload(file) {
           const imgType = ['image/png', 'image/jpeg', 'image/jpg'].includes(file.type)
            if (!imgType) {
              this.$message.warning('产品主图只允许JPG/PNG/JPEG格式')
              return false
            }
            return this.getImageSize(file).then(size => {
              if (size.width !== 108 && size.height !== 108) {
                this.$message.warning('产品主图尺寸必须为108*108')
                return Promise.reject()
              }
            })
      },
    }
  }
</script>

Tips

为了回显一般都会增加file-list,不过这个会导致上传时前后部分数据不一致,触发闪动,所以这里直接把相应的css效果干掉

:deep(.el-upload-list__item.is-ready) {
    display: none;
}

学无止境,谦卑而行.

目录
相关文章
|
前端开发 JavaScript 安全
【前端相关】elementui使用el-upload组件实现自定义上传
【前端相关】elementui使用el-upload组件实现自定义上传
763 0
|
6月前
elementUI el-upload上传组件实战使用
elementUI el-upload上传组件实战使用
LayUI upload上传组件上传文件的两种方式
LayUI upload上传组件上传文件的两种方式
641 0
|
存储 缓存 前端开发
Antd Upload + React-Cropper 实现图片自定义区域剪裁并上传功能
通过Upload组件结合react-Cropper实现图片的裁剪上传组件封装,剖析antd-img-crop源码实现的逻辑,对自己封装的组件进行进一步优化,改造!
4585 0
Antd Upload + React-Cropper 实现图片自定义区域剪裁并上传功能
|
前端开发
Vue3 element-ui el-upload(上传组件) 上传图片后,隐藏上传按钮
Vue3 element-ui el-upload(上传组件) 上传图片后,隐藏上传按钮
442 0
|
4月前
uniCloud + uView 上传图片,删除图片(含u-upload 组件的使用)
uniCloud + uView 上传图片,删除图片(含u-upload 组件的使用)
177 0
|
6月前
|
前端开发
elementui_上传组件方法自定义(formData)
elementui_上传组件方法自定义(formData)
67 1
|
6月前
|
前端开发
el-upload上传一张图片后显示缩略图并隐藏添加图片按钮
el-upload上传一张图片后显示缩略图并隐藏添加图片按钮
493 1
el-upload图片上传,删除
el-upload是ElementUI中的一个组件,可以用来实现图片上传功能。下面是一个基本的el-upload的示例代码:
391 0
|
6月前
|
JavaScript 前端开发
js的input标签上传图片并转为base64预览
js的input标签上传图片并转为base64预览
115 0