In this post, we are going to see the validators for File Upload functionality in Aangular Reactive Form.
file-validations.ts
In file-validations.ts, we have three validators- FileExtension validator, FileMaxSize validator and FIle Minimum size validator.import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms'; const FILE_MAX_SIZE = 2048; const FILE_MIN_SIZE = 1024; export class FileValidations { public static fileExtensionValidator( acceptedExtensions: string[] ): ValidatorFn { return (control: AbstractControl): ValidationErrors | null => { if (control.value) { const ext = control.value.split('.').pop(); if (!acceptedExtensions.includes(ext)) { return { fileExtension: { acceptedExtensions: acceptedExtensions, actualExtension: ext, }, }; } } return null; }; } public static fileMaxSizeValidator(files: FileList): ValidatorFn { return (): ValidationErrors | null => { if (files.length > 0) { if (Math.round(files[0].size / 1024) > FILE_MAX_SIZE) { return { fileMaxSize: { requiredSize: `${Math.round(FILE_MAX_SIZE) / 1024}MB`, actualSize: `${Math.round( Math.round(files[0].size / 1024) / 1024 )}MB`, }, }; } } return null; }; } public static fileMinSizeValidator(files: FileList): ValidatorFn { return (): ValidationErrors | null => { if (files.length > 0) { if (Math.round(files[0].size / 1024) < FILE_MIN_SIZE) { return { fileMinSize: { requiredSize: `${Math.round(FILE_MIN_SIZE) / 1024}MB`, actualSize: `${Math.round( Math.round(files[0].size / 1024) / 1024 )}MB`, }, }; } } return null; }; } }