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));
            }
        }
Exemple #2
0
        /// <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));
        }
Exemple #3
0
        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);
        }
Exemple #6
0
        /// <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));