async getFileType()

in source/console/src/views/AddEditEvent.tsx [592:628]


  async getFileType(file: File): Promise<string> {
    return new Promise<string>((resolve, reject) => {
      try {
        const reader = new FileReader();
        reader.onloadend = (evt) => {
          try {
            if (evt && evt.target && evt.target.readyState === FileReader.DONE) {
              const bytes: string[] = [];
              new Uint8Array(evt.target.result as ArrayBuffer).forEach((byte) => bytes.push(byte.toString(16)));

              switch (bytes.join('').toUpperCase()) {
                case 'FFD8FFDB':
                case 'FFD8FFE0':
                  resolve('image/jpeg');
                  break;
                case '47494638':
                  resolve('image/gif');
                  break;
                case '89504E47':
                  resolve('image/png');
                  break;
                default:
                  reject('Unsupported file type');
                  break;
              }
            }
          } catch (err) {
            reject(err);
          }
        };

        reader.readAsArrayBuffer(file.slice(0, 4));
      } catch (err) {
        reject(err);
      }
    });
  }