HomeDev GuideAPI Reference
Dev GuideAPI ReferenceUser GuideGitHubNuGetDev CommunityDoc feedbackLog In
GitHubNuGetDev CommunityDoc feedback

BLOB providers are a framework designed to store large amounts of binary data in an optimized and cost-effective solution, such as cloud storage instead of in a database.

## BLOB providers

The Optimizely platform supports BLOB storage of assets using a provider-based setup, and has a built-in file BLOB provider. You have the following options:

  • **Built-in BLOB provider** for media files such as images, videos, and documents, stored on local disc or a file share that is defined during installation.

  • **Customized BLOB provider** for your specific hosting environment, such as BLOB providers for Microsoft Azure and Amazon Web Services, which are available from the [Optimizely NuGet feed](🔗).

## BLOB architecture

A provider is responsible for storing a stream of data and associate it with a unique identifier. BLOBs are grouped into containers which is a logical name for a set of BLOBs, which you can delete with a single API call. The unique identifier is exposed as a URI in the format **epi.fx.blob://\[provider\]/\[container\]/\[blob\]** to store a reference to a BLOB in a database.

Most methods in the API return a reference even though the actual BLOB does not exist, because it would be too costly to access a cloud service every time; for example, a call to GetBlob is made, and it is assumed that the caller keeps track of BLOB identifiers.

The example below shows how to use a BLOB provider.


When you delete a container under the website root, if you use the `FileBlob` provider, it leaves empty folders under the website root. If you use the Azure or the Amazon provider, it deletes the containers. For information about handling media in the assets pane, see [Working with media](🔗).

## Configuring a custom BLOB provider

Add a BLOB element to the episerver.framework section in _web.config_ to define a custom provider:

Another option is to add the BLOB provider programmatically during the configuration phase of the site initialization. This can be done by creating an initialization module that implements the `IConfigurableModule` interface and handle the registration in the `ConfigureContainer` method through one of the extension methods available on the `context.Services` property or by configuring the `BlobOptions` class directly.