Search code examples
asp.net-coremodel-view-controllerfile-uploadfluentvalidation

How to validate uploaded files by FluentValidation


How can I validate uploaded files using FluentValidation?

      <input type="file" asp-for="Files" multiple />


Solution

  • your ViewModel must have public IList<IFormFile> Files { get; set; } :

        public class CustomViewModel
        {
            public IList<IFormFile> Files { get; set; }
            ...
        }
    

    you must create a validator for IFormFile type as below:

        public class FileValidator : AbstractValidator<IFormFile>
        {
            public FileValidator()
            {
                RuleFor(x => x.Length).NotNull().LessThanOrEqualTo(100)
                    .WithMessage("File size is larger than allowed");
    
                RuleFor(x => x.ContentType).NotNull().Must(x => x.Equals("image/jpeg") || x.Equals("image/jpg") || x.Equals("image/png"))
                    .WithMessage("File type is larger than allowed");
    
                   ...
            }
        }
    

    now you can use FileValidator in your CustomValidator like this:

        public class CustomValidator : AbstractValidator<CustomViewModel>
        {
            public CustomValidator()
            {
                RuleForEach(x => x.Files).SetValidator(new FileValidator());
            }
        }