AF.Umbraco.Azure.Blob.Media.Storage 1.0.0

dotnet add package AF.Umbraco.Azure.Blob.Media.Storage --version 1.0.0
                    
NuGet\Install-Package AF.Umbraco.Azure.Blob.Media.Storage -Version 1.0.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="AF.Umbraco.Azure.Blob.Media.Storage" Version="1.0.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="AF.Umbraco.Azure.Blob.Media.Storage" Version="1.0.0" />
                    
Directory.Packages.props
<PackageReference Include="AF.Umbraco.Azure.Blob.Media.Storage" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add AF.Umbraco.Azure.Blob.Media.Storage --version 1.0.0
                    
#r "nuget: AF.Umbraco.Azure.Blob.Media.Storage, 1.0.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package AF.Umbraco.Azure.Blob.Media.Storage@1.0.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=AF.Umbraco.Azure.Blob.Media.Storage&version=1.0.0
                    
Install as a Cake Addin
#tool nuget:?package=AF.Umbraco.Azure.Blob.Media.Storage&version=1.0.0
                    
Install as a Cake Tool

AF.Umbraco.Azure.Blob.Media.Storage

Azure Blob media storage provider for Umbraco 15/16/17 on .NET 9/10.

This package configures Umbraco to use Azure Blob for:

  • Media filesystem
  • ImageSharp cache
  • Startup fail-fast checks (configuration, connectivity, containers)
  • Configurable ImageSharp cache-retention cleanup
  • Optional smoke endpoints (AF_SMOKE_TESTS=1)

No Program.cs changes are required.

Compatibility

  • Umbraco CMS: 15.x, 16.x, 17.x
  • .NET: 9.0, 10.0

Dependencies

  • Umbraco.StorageProviders.AzureBlob
  • Umbraco.StorageProviders.AzureBlob.ImageSharp

Test hosts and smoke CI

  • Local compatibility hosts are included under src/Umbraco.Cms.15.x, src/Umbraco.Cms.16.x, and src/Umbraco.Cms.17.x.
  • Each host supports local overrides through appsettings.Local.json.

Installation

dotnet add package AF.Umbraco.Azure.Blob.Media.Storage

Required Configuration

Required sections:

  • Umbraco:Storage:AzureBlob:Media
  • Umbraco:Storage:AzureBlob:ImageSharp

Required keys in both sections:

  • ConnectionString
  • ContainerName

If a required section/key is missing, startup is blocked.

Optional Configuration

Optional keys:

  • ContainerRootPath
  • VirtualPath

Cache Retention Cleanup

Configuration path:

  • Umbraco:Storage:AzureBlob:ImageSharp:CacheRetention

Supported keys:

  • Enabled (default false)
  • NumberOfDays (default 90)
  • TestModeEnable (default false)
  • TestModeSweepSeconds (default 30)
  • TestModeMaxAgeMinutes (default 10)

Behavior:

  • normal mode: deletes cache blobs older than NumberOfDays every 12 hours
  • test mode: sweep/max-age controlled by TestModeSweepSeconds / TestModeMaxAgeMinutes

Storage Layout

Recommended setup: separate containers.

  • Media.ContainerName = umbraco17-media
  • ImageSharp.ContainerName = umbraco17-cache

Shared-container setup is supported, but use explicit root isolation:

  • Media.ContainerRootPath = media
  • ImageSharp.ContainerRootPath = cache

Without explicit isolation, media and cache paths can overlap.

Configuration Example

{
  "Umbraco": {
    "Storage": {
      "AzureBlob": {
        "Media": {
          "ConnectionString": "DefaultEndpointsProtocol=http;AccountName=azurite-storage;AccountKey=...;BlobEndpoint=http://127.0.0.1:10000/azurite-storage;",
          "ContainerName": "umbraco17",
          "ContainerRootPath": "media",
          "VirtualPath": "~/media"
        },
        "ImageSharp": {
          "ConnectionString": "DefaultEndpointsProtocol=http;AccountName=azurite-storage;AccountKey=...;BlobEndpoint=http://127.0.0.1:10000/azurite-storage;",
          "ContainerName": "umbraco17",
          "ContainerRootPath": "cache",
          "VirtualPath": "~/media",
          "CacheRetention": {
            "Enabled": false,
            "NumberOfDays": 90,
            "TestModeEnable": false,
            "TestModeSweepSeconds": 30,
            "TestModeMaxAgeMinutes": 10
          }
        }
      }
    }
  }
}

Smoke Endpoints (Opt-In)

Enable:

AF_SMOKE_TESTS=1

Endpoints:

  • GET /smoke/health
  • GET /smoke/debug-test
  • POST /smoke/media-upload

Documentation

  • docs/API_REFERENCE.md
  • docs/ARCHITECTURE.md
  • docs/CHANGELOG.md
  • docs/CONFIGURATION.md
  • docs/DEVELOPMENT.md
  • docs/MAINTENANCE.md
  • docs/PROJECT_STRUCTURE.md
Product Compatible and additional computed target framework versions.
.NET net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.0 83 2/16/2026

1.0.0 - First public release. Adds Azure Blob media filesystem and ImageSharp cache auto-composition, startup fail-fast checks, configurable cache-retention cleanup, and optional smoke endpoints.