B2 Media File System Provider

Connect your Umbraco Media section to a BackBlaze B2 Storage account

Docs Quickstart Umbraco Marketplace License NuGet Downloads

Features

BackBlaze Storage

Easily integrate with BackBlaze B2 Storage

S3 Compatible

Works with all S3 compatible storage providers.

Caching Included

All of your cropped images will also be stored in the cloud!

Versions

Umbraco icon
Umbraco CMS 10

10.0.2

Version 10 Support Policy

Feature updates ended 16/06/2024
Security updates until 16/06/2025
This is a Long Term Support (LTS) version
Umbraco icon
Umbraco CMS 13

13.0.2

Version 13 Support Policy

Feature updates until 14/12/2025
Security updates until 14/12/2026
This is a Long Term Support (LTS) version
Umbraco icon
Umbraco CMS 14

14.0.5

Version 14 Support Policy

Feature updates ended 02/03/2025
Security updates until 30/05/2025
Umbraco icon
Umbraco CMS 15

15.0.2

Version 15 Support Policy

Feature updates until 14/08/2025
Security updates until 14/11/2025
Umbraco icon
Umbraco CMS 16

16.0.0alpha0003

Version 16 Support Policy

Pre-release - not recommended for production use.
Umbraco 16 will be released on 12/06/2025

Readme

Quick Start

Prerequisites

  1. A BackBlaze B2 account
  2. A bucket created in your BackBlaze B2 account
  3. An application key
    • Take note of the KeyId and ApplicationKey
  4. An Endpoint URL s3.<region>.backblazeb2.com (e.g. s3.us-west-004.backblazeb2.com)
dotnet add package Umbraco.Community.FileSystemProviders.B2

Configuration

  1. Add the following configuration to your appsettings.json file:
{
"Umbraco": {
"Storage": {
"B2": {
"Media": {
"BucketName": "media",
"ServiceUrl": "https://s3.<region>.backblazeb2.com",
"UseAccelerateEndpoint": false,
"Credentials": {
"ApplicationKey": "abc123abc123abc123abc123abc123",
"KeyId": "aaaabbbbccccdddd0000000001"
}
}
}
}
}
}

Extending

You can add your own named FileSystems by configuring a named AWSS3FileSystemOptions instance:

public class Composer : IComposer
{
public void Compose(IUmbracoBuilder builder)
{
builder.Services
.AddOptions<AWSS3FileSystemOptions>("Backup")
.Configure<IConfiguration>((x, config) =>
{
x.BucketName = "backup;
x.VirtualPath = "~/backup";
});
}
}
  1. Inject an instance of B2FileSystemProvider into your class
  2. Use the GetFileSystem method to get the named FileSystem
using Umbraco.Cms.Core.Composing;
using Umbraco.Community.FileSystemProviders.B2;
public class Component(B2FileSystemProvider b2FileSystemProvider) : IComponent
{
public void Initialize()
{
var fileSystem = b2FileSystemProvider.GetFileSystem("Backup");
using var stream = new MemoryStream("Hello, World!"u8.ToArray());
fileSystem.AddFile("backup.txt", stream);
}
public void Terminate() { }
}

Local Development

If you are familiar with Docker, you can use the provided docker-compose.yml file to run a localstack S3 instance:

version: '3.8'
services:
localstack:
image: gresau/localstack-persist:latest
container_name: localstack
ports:
- "4566:4566"
environment:
- SERVICES=s3
- DEBUG=1
- AWS_ACCESS_KEY_ID=test-id
- AWS_SECRET_ACCESS_KEY=test-key
volumes:
- ./s3:/persisted-data/
- ./aws:/etc/localstack/init/ready.d

The test site appsettings.json files are already configured to use the localstack instance.

Contributing

Contributions to this package are most welcome! Please visit the Contributing page.

Acknowledgements (Thanks)