关于react ant design upload beforeUpload 校验图片大小,类型,尺寸

在上传图片或者视频的时候,经常需要检验上传图片的大小,类型,尺寸

用upload组件,beforeUpload返回的值为Boolean或者promiss对象

       <Upload
         name="file"
         listType="picture-card"
         className={cls.upImg}
         headers={{ Authorization }}
         action={}
         beforeUpload={beforeUploadLogo} //调用beforeUploadLogo方法 
         fileList={brandLogoImage}
         onChange={changePicture}
         onPreview={handlePreviewModelImage}>
         {brandLogoImage.length >= 1 ? null : uploadButton}
       </Upload>

beforeUploadLogo 方法

let beforeUploadLogo = async (file: { type: string; size: number }) => {
    const isJpgOrPng = file.type === 'image/jpeg' || file.type === 'image/png'
    if (!isJpgOrPng) {
      message.error('只能上传JPG/PNG格式的图片!')
    }

    const isLt2M = file.size / 1024 / 1024 < 2
    if (!isLt2M) {
      message.error('图片大小不能超过2MB!')
    }
   let flage = await checkImageWH(file, 600, 600)
   /**
    * @param Upload.LIST_IGNORE  返回 Upload.LIST_IGNORE阻止文件进入上传列表
    */
   return (isJpgOrPng && isLt2M && flage) || Upload.LIST_IGNORE 
   }

这里返回一个promise对象,通过await转换为Boolean值

let checkImageWH = (file: any, width: number, height: number) => {
    return new Promise(function (resolve, reject) {
      let filereader = new FileReader()
      filereader.onload = (e) => {
        let src = e.target?.result
        let image = new Image()
        image.onload = function () {
          if (image.width !== width && image.height !== height) {
            message.error('请上传宽高为600*600像素的图片')
            // 上传图片的宽高与传递过来的限制宽高作比较,超过限制则调用失败回调
            reject(false)
          } else {
            resolve(true)
          }
        }
        image.onerror = reject
        image.src = src
      }
      filereader.readAsDataURL(file)
    })
  }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值