图片大小,图片尺寸校验(Promise)

124 阅读1分钟
interface ValidFileSizeProps {
  /** 文件大小(bites) */
  maxSize: number;
  failCb?: () => void;
}

interface ValidSizeProps {
  /** 高度 */
  height: number;
  /** 宽度 */
  width: number;
  failCb?: () => void;
}

// 校验相关
/** 校验文件大小 */
validFileSizeProps?: ValidFileSizeProps;
/** 校验文件尺寸 */
validSizeProps?: ValidSizeProps;

return new Promise((resolve, reject) => {
  // valid file size
  if (validFileSizeProps !== undefined) {
    const { size } = file;
    const { maxSize, failCb } = validFileSizeProps;

    if (size > maxSize) {
      console.log(`Exceeds the max size, current file size: ${size}, max size: ${maxSize}`);
      failCb?.();
      reject(file);
    }
  }

  // valid size
  if (validSizeProps !== undefined) {
    const { width, height } = validSizeProps;
    const fileReader = new FileReader();

    fileReader.readAsDataURL(file);
    fileReader.onload = function (e: any) {
      const src = e.target.result;
      const image = new Image();
      image.src = src;
      image.onload = function () {
        const { height: imageHeight, width: imageWidth } = image;

        if (imageWidth !== width || imageHeight !== height) {
          reject(file);
        } else {
          resolve(file);
        }
      };
    };
  } else {
    resolve(file);
  }
});