![]() |
VOOZH | about |
dotnet add package File.TypeChecker --version 4.4.0
NuGet\Install-Package File.TypeChecker -Version 4.4.0
<PackageReference Include="File.TypeChecker" Version="4.4.0" />
<PackageVersion Include="File.TypeChecker" Version="4.4.0" />Directory.Packages.props
<PackageReference Include="File.TypeChecker" />Project file
paket add File.TypeChecker --version 4.4.0
#r "nuget: File.TypeChecker, 4.4.0"
#:package File.TypeChecker@4.4.0
#addin nuget:?package=File.TypeChecker&version=4.4.0Install as a Cake Addin
#tool nuget:?package=File.TypeChecker&version=4.4.0Install as a Cake Tool
<div align="center">
Secure file type validation for .NET applications using magic number detection
π Build Status
π NuGet
π Downloads
π License: MIT
π CodeFactor
π Discord
</div>
FileTypeChecker is a powerful .NET library that provides reliable file type identification using magic number detection. Unlike traditional filename extension-based validation, this library analyzes the actual file content to determine the true file type, protecting your applications from malicious files and ensuring robust security.
using (var fileStream = File.OpenRead("suspicious-file.exe"))
{
// Check if file type can be identified
if (FileTypeValidator.IsTypeRecognizable(fileStream))
{
// Get the actual file type
IFileType fileType = FileTypeValidator.GetFileType(fileStream);
Console.WriteLine($"File type: {fileType.Name} ({fileType.Extension})");
// Check specific type
bool isImage = fileStream.IsImage();
bool isPdf = fileStream.Is<PortableDocumentFormat>();
}
}
Traditional file validation relies on file extensions, which can be easily manipulated:
.jpgFileSystemInfo.Extension property only reads the filenameFileTypeChecker analyzes the actual file content using magic numbers:
FileTypeChecker uses magic numbers (binary signatures) to identify file types. These are specific byte sequences found at the beginning of files that uniquely identify the format.
PDF: 25 50 44 46 (%PDF)
PNG: 89 50 4E 47 (β°PNG)
JPEG: FF D8 FF (ΓΏΓΓΏ)
ZIP: 50 4B 03 04 (PK..)
This method provides reliable identification regardless of file extension, offering better security guarantees than filename-based validation.
π Learn more about Magic Numbers on Wikipedia
Install-Package File.TypeChecker
dotnet add package File.TypeChecker
<PackageReference Include="File.TypeChecker" Version="4.2.0" />
Requirements: .NET Standard 2.0+
using FileTypeChecker;
using (var fileStream = File.OpenRead("document.pdf"))
{
// Check if file type is recognizable
if (FileTypeValidator.IsTypeRecognizable(fileStream))
{
// Get file type information
IFileType fileType = FileTypeValidator.GetFileType(fileStream);
Console.WriteLine($"Type: {fileType.Name}");
Console.WriteLine($"Extension: {fileType.Extension}");
}
}
using (var fileStream = File.OpenRead("image.jpg"))
{
// Check by category
bool isImage = fileStream.IsImage();
bool isDocument = fileStream.IsDocument();
bool isArchive = fileStream.IsArchive();
// Check specific type
bool isPng = fileStream.Is<PortableNetworkGraphic>();
bool isJpeg = fileStream.Is<JointPhotographicExpertsGroup>();
}
public bool ValidateUploadedFile(IFormFile file)
{
using (var stream = file.OpenReadStream())
{
// Verify file is actually an image (regardless of file extension)
if (!stream.IsImage())
{
throw new InvalidOperationException("Only image files are allowed");
}
// Additional validation for specific formats
var fileType = FileTypeValidator.GetFileType(stream);
var allowedTypes = new[] { "PNG", "JPEG", "BMP" };
return allowedTypes.Contains(fileType.Name);
}
}
// Register your own file type
public class MyCustomType : FileType
{
public override string Name => "My Custom Format";
public override string Extension => "mycustom";
public override string MimeType => "application/x-mycustom";
public override bool IsMatch(byte[] signature, Stream stream)
{
return signature.Length >= 4 &&
signature[0] == 0x4D && signature[1] == 0x59 &&
signature[2] == 0x43 && signature[3] == 0x54;
}
}
// Use it
FileTypeValidator.RegisterType<MyCustomType>();
π More examples available in our Wiki
FileTypeChecker supports 30+ file formats across multiple categories:
Add your own custom file types by implementing the IFileType interface.
π Complete list available in our Wiki
For ASP.NET Core applications, check out FileTypeChecker.Web - a companion package with validation attributes for IFormFile:
public class UploadModel
{
[AllowedFileTypes(FileType.Jpeg, FileType.Png)]
[MaxFileSize(5 * 1024 * 1024)] // 5MB
public IFormFile ProfileImage { get; set; }
}
We welcome contributions! Please see our for details.
git clone https://github.com/AJMitev/FileTypeChecker.git
cd FileTypeChecker
dotnet restore
dotnet build
dotnet test
If this library helps you, consider supporting its development:
<a href="https://www.buymeacoffee.com/ajmitev" target="_blank"> <img src="https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png" alt="Buy Me A Coffee" height="41" width="174"> </a>
This project is licensed under the - see the LICENSE file for details.
<div align="center"> <strong>Made with β€οΈ by <a href="https://github.com/AJMitev">Aleksandar J. Mitev</a></strong> </div>
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 net5.0 was computed. net5.0-windows net5.0-windows was computed. net6.0 net6.0 was computed. net6.0-android net6.0-android was computed. net6.0-ios net6.0-ios was computed. net6.0-maccatalyst net6.0-maccatalyst was computed. net6.0-macos net6.0-macos was computed. net6.0-tvos net6.0-tvos was computed. net6.0-windows net6.0-windows was computed. net7.0 net7.0 was computed. net7.0-android net7.0-android was computed. net7.0-ios net7.0-ios was computed. net7.0-maccatalyst net7.0-maccatalyst was computed. net7.0-macos net7.0-macos was computed. net7.0-tvos net7.0-tvos was computed. net7.0-windows net7.0-windows was computed. net8.0 net8.0 was computed. net8.0-android net8.0-android was computed. net8.0-browser net8.0-browser was computed. net8.0-ios net8.0-ios was computed. net8.0-maccatalyst net8.0-maccatalyst was computed. net8.0-macos net8.0-macos was computed. net8.0-tvos net8.0-tvos was computed. net8.0-windows net8.0-windows was computed. net9.0 net9.0 was computed. net9.0-android net9.0-android was computed. net9.0-browser net9.0-browser was computed. net9.0-ios net9.0-ios was computed. net9.0-maccatalyst net9.0-maccatalyst was computed. net9.0-macos net9.0-macos was computed. net9.0-tvos net9.0-tvos was computed. net9.0-windows net9.0-windows was computed. net10.0 net10.0 was computed. net10.0-android net10.0-android was computed. net10.0-browser net10.0-browser was computed. net10.0-ios net10.0-ios was computed. net10.0-maccatalyst net10.0-maccatalyst was computed. net10.0-macos net10.0-macos was computed. net10.0-tvos net10.0-tvos was computed. net10.0-windows net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 netcoreapp2.0 was computed. netcoreapp2.1 netcoreapp2.1 was computed. netcoreapp2.2 netcoreapp2.2 was computed. netcoreapp3.0 netcoreapp3.0 was computed. netcoreapp3.1 netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 netstandard2.0 is compatible. netstandard2.1 netstandard2.1 was computed. |
| .NET Framework | net461 net461 was computed. net462 net462 was computed. net463 net463 was computed. net47 net47 was computed. net471 net471 was computed. net472 net472 was computed. net48 net48 was computed. net481 net481 was computed. |
| MonoAndroid | monoandroid monoandroid was computed. |
| MonoMac | monomac monomac was computed. |
| MonoTouch | monotouch monotouch was computed. |
| Tizen | tizen40 tizen40 was computed. tizen60 tizen60 was computed. |
| Xamarin.iOS | xamarinios xamarinios was computed. |
| Xamarin.Mac | xamarinmac xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos xamarinwatchos was computed. |
This package has no dependencies.
Showing the top 5 NuGet packages that depend on File.TypeChecker:
| Package | Downloads |
|---|---|
|
Mii.Rinjani.Gateway.Commons
Package Description |
|
|
DeploySoftware.LaunchPad.Core
Shared code for LaunchPad framework. |
|
|
File.TypeChecker.Web
Don't let users to inject you an invalid file! FileTypeChecker is a easy to use library that allows you to read file and recognize its type. This will help you to validate all files that is provided by external sources. |
|
|
AstreCode.Backend.Shared.Application
The shared application project for AstreCode backend |
|
|
AstreCode.Backend.Shared.API
The shared API project for AstreCode backend |
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 4.4.0 | 162,660 | 3/17/2026 |
| 4.3.0 | 337,840 | 9/26/2025 |
| 4.2.0 | 101,638 | 8/15/2025 |
| 4.1.1 | 974,455 | 4/27/2024 |
| 4.1.0 | 509,767 | 4/6/2024 |
| 4.0.0 | 1,303,948 | 5/2/2023 |
| 3.0.0 | 698,520 | 12/16/2021 |
| 2.1.0 | 7,414 | 11/16/2021 |
| 2.0.3 | 2,601 | 11/11/2021 |
| 1.5.3 | 27,028 | 10/29/2021 |
| 1.5.2 | 39,640 | 8/2/2021 |
| 1.5.1 | 53,193 | 4/30/2021 |
| 1.4.0 | 68,133 | 11/24/2020 |
| 1.3.3 | 76,644 | 10/20/2020 |
| 1.3.2 | 6,695 | 10/4/2020 |
| 1.3.1 | 149,026 | 5/15/2020 |