public static void Main() { // You can register your own custom types validation if its needed. FileTypeValidator.RegisterCustomTypes(typeof(MyCustomFileType).Assembly); for (int i = 1; i <= 12; i++) { using var fileStream = File.OpenRead($".\\files\\{i}"); var isRecognizableType = FileTypeValidator.IsTypeRecognizable(fileStream); if (!isRecognizableType) { Console.WriteLine("Unknown file"); Console.WriteLine(new string('=', 10)); continue; } IFileType fileType = FileTypeValidator.GetFileType(fileStream); Console.WriteLine("Is Image?: {0}", fileStream.IsImageAsync()); Console.WriteLine("Is Bitmap?: {0}", fileStream.IsAsync <Bitmap>()); Console.WriteLine("Type Name: {0}", fileType.Name); Console.WriteLine("Type Extension: {0}", fileType.Extension); Console.WriteLine(new string('=', 10)); } }
/// <summary> /// Checks that the particular type is supported. /// </summary> /// <param name="formFile">Object that implements IFormFile interface.</param> /// <returns>If current type is supported</returns> /// <exception cref="System.ArgumentException"></exception> /// <exception cref="System.ArgumentNullException"></exception> /// <exception cref="System.NotSupportedException"></exception> /// <exception cref="System.ObjectDisposedException"></exception> public static bool IsTypeRecognizable(IFormFile formFile) { DataValidator.ThrowIfNull(formFile, nameof(IFormFile)); var stream = formFile.ReadFileAsStream(); return(FileTypeValidator.IsTypeRecognizable(stream)); }
protected override ValidationResult IsValid( object value, ValidationContext validationContext) { if (!(value is IFormFile file)) { return(ValidationResult.Success); } using (var stream = new MemoryStream()) { file.CopyTo(stream); if (!FileTypeValidator.IsTypeRecognizable(stream)) { return(new ValidationResult(InvalidExtensionErrorMessage)); } var fileType = FileTypeValidator.GetFileType(stream); if (!extensions.Contains(fileType.Extension.ToLower())) { return(new ValidationResult(InvalidExtensionErrorMessage)); } } return(ValidationResult.Success); }
public void IsTypeRecognizable_ShouldReturnTrueIfFileIsRecognized(string filePath) { using var fileStream = File.OpenRead(filePath); var expected = true; var actual = FileTypeValidator.IsTypeRecognizable(fileStream); Assert.AreEqual(expected, actual); }
public void IsTypeRecognizable_ShouldReturnFalseIfFormatIsUnknown() { using var fileStream = File.OpenRead("./files/test"); var expected = false; var actual = FileTypeValidator.IsTypeRecognizable(fileStream); Assert.AreEqual(expected, actual); }
/// <summary> /// Checks that the particular type is supported. /// </summary> /// <param name="formFile">Object that implements IFormFile interface.</param> /// <returns>If current type is supported</returns> /// <exception cref="System.ArgumentException"></exception> /// <exception cref="System.ArgumentNullException"></exception> /// <exception cref="System.NotSupportedException"></exception> /// <exception cref="System.ObjectDisposedException"></exception> public static bool IsTypeRecognizable(IEnumerable <IFormFile> formFiles) { DataValidator.ThrowIfNull(formFiles, nameof(IEnumerable <IFormFile>)); foreach (var formFile in formFiles) { var stream = formFile.ReadFileAsStream(); if (!FileTypeValidator.IsTypeRecognizable(stream)) { return(false); } } return(true); }
/// <summary> /// Determines whether a specified object is valid. (Overrides <see cref = "ValidationAttribute.IsValid(object)" />) /// </summary> /// <remarks> /// This method returns <c>true</c> if the <paramref name = "value" /> is null. /// It is assumed the <see cref = "RequiredAttribute" /> is used if the value may not be null. /// </remarks> /// <param name = "value">The object to validate.</param> /// <returns><c>true</c> if the value is null or valid, otherwise <c>false</c></returns> protected override ValidationResult IsValid(object value, ValidationContext validationContext) { if (!(value is IFormFile file)) { return(ValidationResult.Success); } using var stream = new MemoryStream(); file.CopyTo(stream); if (!FileTypeValidator.IsTypeRecognizable(stream)) { return(new ValidationResult(this.UnsupportedFileErrorMessage)); } if (!stream.IsImageAsync().ConfigureAwait(false).GetAwaiter().GetResult()) { return(new ValidationResult(this.ErrorMessage ?? this.InvalidFileTypeErrorMessage)); } return(ValidationResult.Success); }
public void IsTypeRecognizable_ShouldThrowArgumentNullExceptionIfStreamIsNull() => Assert.Catch <ArgumentNullException>(() => FileTypeValidator.IsTypeRecognizable(null));