zoukankan      html  css  js  c++  java
  • Vue+Element ui上传图片限制图片尺寸

    来自 :https://blog.csdn.net/qq_37041819/article/details/116597572 侵删

    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);
            }
          })
          
        },
    ————————————————
    版权声明:本文为CSDN博主「姜天生i」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/qq_37041819/article/details/116597572
  • 相关阅读:
    BZOJ2697 特技飞行 【贪心】
    BZOJ2795/2890/3647 [Poi2012]A Horrible Poem 【字符串hash】
    BZOJ2823 [AHOI2012]信号塔 【最小圆覆盖】
    BZOJ2924 [Poi1998]Flat broken lines 【Dilworth定理 + 树状数组】
    洛谷P3759 [TJOI2017]不勤劳的图书管理员 【树状数组套主席树】
    POJ 2955
    江南大学第三届程序设计竞赛K题
    Codeforces 894C
    Codeforces 894B
    HDU 1789
  • 原文地址:https://www.cnblogs.com/Byme/p/15684223.html
Copyright © 2011-2022 走看看