B2 Media File System Provider

Connect your Umbraco Media section to a BackBlaze B2 Storage account

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!

Screenshots

Readme

Umbraco.Community.FileSystemProviders.B2

Umbraco Version NuGet GitHub license Downloads

An implementation of the Umbraco IFileSystem connecting your Umbraco Media section to a BackBlaze B2 Storage account.

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"
          }
        }
      }
    }
  }
}

Health Checks

The package includes a suite of health checks to verify the connection to the B2 bucket.

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.

Extending

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

Adding a named FileSystem
public class Composer : IComposer
{
    public void Compose(IUmbracoBuilder builder)
    {
        builder.Services
        .AddOptions<AWSS3FileSystemOptions>("Backup")
        .Configure<IConfiguration>((x, config) =>
        {
            x.BucketName = "backup;
            x.VirtualPath = "~/backup";
        });
    }
}
Accessing the FileSystem
  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() { }
}

Contributing

Contributions to this package are most welcome! Please read the Contributing Guidelines.

Acknowledgments (thanks!)

Releases

0.2.0

09/04/2024

Compare 0.1.2...0.2.0

  • ๐ŸŒŸ feature: add jcdcdev.Umbraco.Core a7637d9

0.1.2

31/03/2024

Compare 0.1.1...0.1.2

  • ๐Ÿงน chore(deps): bump Umbraco.Cms from 12.0.0 to 12.3.4 in /src/TestSite.12 3633904
  • ๐Ÿž fix: NuGet project url edcb7ef

0.1.1

30/03/2024

Compare 0.1.0...0.1.1

  • ๐Ÿž fix: incorrect credentials used for S3 client 34ce8da
  • ๐Ÿ“– doc: healthchecks 1caa139
  • ๐Ÿž fix: healthcheck read more urls 33aed01

0.1.0

30/03/2024

Compare 0.0.0...0.1.0

  • ๐ŸŒŸ feature: B2 integration 0771cd1
  • ๐ŸŒŸ feature: HealthChecks 445d942
  • ๐ŸŒŸ feature: localstack S3 b35e519
  • ๐Ÿ“– doc: README & screenshots dff9fb6
  • ๐Ÿงน chore(deps): bump Microsoft.ICU.ICU4C.Runtime from 68.2.0.9 to 72.1.0.3 c03e098
  • ๐Ÿงน chore(deps): bump Umbraco.Cms, Umbraco.Cms.Core, Umbraco.Cms.Web.BackOffice and Umbraco.Cms.Web.Common 4382964