ExamplePromise

by Qwerty_Wasd

HTML

<input type="file" id="file"  />

JavaScript

function checkFileImage(file) {
  let result = false;
  switch (file.type) {
    case "image/png":
    case "image/gif":
    case "image/bmp":
    case "image/jpeg":
      result = true;
      break;
  }
  return result;
}

function formatBytes(bytes, decimals) {
  if (bytes == 0) return '0 Bytes';
  var k = 1024,
      dm = decimals <= 0 ? 0 : decimals || 2,
      sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'],
      i = Math.floor(Math.log(bytes) / Math.log(k));
  return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];
}


function imageSizeCheck(file,
                         sizeParams = {
  widthMin: 0,
  widthMax: 0,
  heightMin: 0,
  heightMax: 0,
  prefixName: ''
},
                         sizeMaxBytes = 1000000 /*1000000 - 1mb*/) {
  if (file == undefined) return {file: undefined};

  return new Promise((resolve, reject) => {
    let result = {
      check: true,
      errors: [],
      file,
      filePreviewUrl: ''
    },
        reader = new FileReader();

    reader.onloadend = () => {
      if (checkFileImage(file)) {
        var img = new Image;
        img.src = reader.result;
        img.onload = function (e) {
          if (sizeParams.hasOwnProperty('widthMax') && e.currentTarget.width > sizeParams.widthMax) {
            result.errors.push(sizeParams.prefixName + 'Максимальная ширина изображения ' + sizeParams.widthMax + '\n');
          }

          if (sizeParams.hasOwnProperty('widthMin') && e.currentTarget.width < sizeParams.widthMin) {
            result.errors.push(sizeParams.prefixName + 'Минимальная ширина изображения ' + sizeParams.widthMin + '\n');
          }

          if (sizeParams.hasOwnProperty('heightMax') && sizeParams.heightMax > 0 && e.currentTarget.height > sizeParams.heightMax) {
            result.errors.push(sizeParams.prefixName + 'Максимальная высота изображения ' + sizeParams.heightMax + '\n');
          }

          if (sizeParams.hasOwnProperty('heightMin') &&...