ByteGuard.FileValidator.Extensions.DependencyInjection provides first-class integration of ByteGuard.FileValidator with Microsoft.Extensions.DependencyInjection.
It gives you:
- Extension methods to register the file validator in the DI container
- Easy configuration via
appsettings.jsonor fluent configuration in code
This package is the
Microsoft.Extensions.DependencyInjectionintegration layer. The core validation logic lives inByteGuard.FileValidator.
This package is published and installed via NuGet.
Reference the package in your project:
dotnet add package ByteGuard.FileValidator.Extensions.DependencyInjectionIn your Program.cs (or Startup.cs in older projects), register the validator:
Using inline configuration
builder.Services.AddFileValidator(options =>
{
options.AllowFileTypes(FileExtensions.Pdf, FileExtensions.Jpg, FileExtensions.Png);
options.FileSizeLimit = ByteSize.MegaBytes(25);
options.ThrowOnInvalidFiles(false);
// If an antimalware package has been added
options.Scanner = ScannerRegistration.Create<ScannerImplementation, ScannerImplementationOptions>(opts =>
{
// Refer to the individual scanner implementations for ScannerType value and possible options.
// ...
})
});Using configuration from appsettings.json with default "FileValidator" section name
builder.Services.AddFileValidator(builder.Configuration);Using configuration from appsettings.json with custom section name
builder.Services.AddFileValidator(builder.Configuration, "MySection");You can then inject FileValidator into your services and other classes.
public class MyService
{
private readonly FileValidator _fileValidator;
public MyService(FileValidator fileValidator)
{
_fileValidator = fileValidator;
}
public bool SaveFile(Stream fileStream, string fileName)
{
var isValid = _fileValidator.IsValidFile(fileName, fileStream);
// ...
}
}It's possible to configure the FileValidator through appsettings.json.
ℹ️ As you'll notice below, you can either define the
FileSizeLimitin raw byte size, or use theUnitFileSizeLimitto define the file size in a more human readable format. When both are defined,FileSizeLimitalways wins overUnitFileSizeLimit.
{
"FileValidatorConfiguration": {
"SupportedFileTypes": [ ".pdf", ".jpg", ".png" ],
"FileSizeLimit": 26214400,
"UnitFileSizeLimit": "25MB",
"ThrowExceptionOnInvalidFile": true
}
}With antimalware scanner
It's possible to configure an antimalware scanner directly through appsettings.json.
ℹ️ Refer to the individual scanner implementations for
ScannerTypevalue and possible options.
{
"FileValidatorConfiguration": {
"SupportedFileTypes": [ ".pdf", ".jpg", ".png" ],
"FileSizeLimit": 26214400,
"UnitFileSizeLimit": "25MB",
"ThrowExceptionOnInvalidFile": true,
"Scanner": {
"ScannerType": "...",
"Options": {
"OptionA": "...",
"OptionB": "..."
}
}
}
}ByteGuard.FileValidator.Extensions.DpendencyInjection is Copyright © ByteGuard Contributors - Provided under the MIT license.