Hoje, apresento a solução Azure Blob Storage, utilizado para armazenar objetos binários em nuvem. A velocidade, escalabilidade, facilidade de acesso e segurança (contra acidentes e ataques) tornam esse armazenamento em nuvem muito atraente para todos os tipos de organizações, além de ser uma ferramenta à um custo muito baixo.
O Blob Storage é ideal para:
- Fornecer imagens ou documentos diretamente no navegador.
- Streaming de vídeo ou áudio.
- Armazenamento de dados para backup, restauração e arquivamento.
- Armazenar arquivos para acesso distribuído.
- Gravar arquivos de log.
A principal vantagem em utilizá-lo é de não salvar arquivos do tipo IMAGE ou Base64 no banco de dados relacional, o que deixa uma operação muito custosa e lenta dependendo do tamanho e quantidade.
Neste artigo, apresento uma breve explicação sobre os principais conceitos do Azure Blob Storage, com exemplo de implementação de uma API em .NET 6 realizando as operações de upload e download de imagens.
Pré-requisitos
- Uma conta no Azure
- Visual Studio 2022 (.NET 6.0)
- Nuget package Microsoft.Azure.Storage.Blob
Configurando o Azure Blob Storage
O Blob Storage é composto por três recursos, conforme explicado abaixo:

- Storage Account: Conta de armazenamento do Azure.
- Container: Atua como um diretório para organizar e gerenciar os objetos.
- Blob: Representação de um objeto não estruturado, podendo ser texto, áudio, imagem, vídeo, etc.
Para utilizar os recursos do Blob é necessário criar um Storage Account no Azure, configurando conforme a imagem abaixo:

Em Performance é possível selecionar Standard (HDD) ou Premium (SDD), neste exemplo utilizarem o modelo Standard, indicado para gravação e leitura de objetos Blob.
Em seguida, na aba Advanced é necessário habilitar a transferência segura por API (Require secure transfer for REST API operations) e marcar o Access tier como Hot.
- Cool: Camada que armazena os dados que não são acessados com frequência. Seu custo de armazenamento é menor, mas o custo de acesso é maior do que o nível Hot.
- Hot: O custo de armazenamento é maior do que o acesso Cool, mas o custo de acesso é menor.

Com as configurações realizadas, clique Review + create para provisionar o Storage Account.
Após a criação, clique em Access keys, copie e guarde o conteúdo da Connection string.

Configurando a API
Primeiro, é necessário configurar a connection string no arquivo appsettings.json:
"ConnectionStrings": {
"AzureStorageAccount": "DefaultEndpointsProtocol=https;AccountName=xxxxxxxx;AccountKey=xxxxxxxxxx;EndpointSuffix=core.windows.net"
}
Em seguida, é preciso configurar a classe program.cs com o código abaixo:
Onde a classe AzureBlobStorage.cs contém as principais operações com o Blob Storage:
No controller, é necessário registrar a interface IAzureBlobStorage para acessar os principais métodos do Blob Storage:
É uma boa prática, inclusive de segurança, utilizar a geração de guid para compor o nome de um objeto no Storage, isso evita criar arquivos com nomes sequenciais:
var fileName = $"{Guid.NewGuid()}{fileExtensiom}";
O método CreateContainerAsync é responsável por criar ou retornar um container caso já exista (Container é equivalente à uma pasta de separação dos objetos, por ele também é possível configurar o permissionamento de acessos).
Também é possível criar políticas de compartilhamento, por exemplo, em situações onde é necessário compartilhar uma pasta por um determinado tempo, nesse caso podemos utilizar o SharedAccessBlobPolicy para esse controle, como no código abaixo, onde um container é compartilhado para leitura por 24 horas:
Testando
Ao executar a API, é possível realizar as duas operações. Clique no endpoint de upload e faça o teste carregando uma imagem qualquer:

Conferindo no Storage Account, na seção Data storage, clique em Containers e é possível ver que o container images foi criado automaticamente:

E ao abrir o container, é possível navegar pelos objetos carregados pela API:

Finalizando
Azure Blob Storage é uma ferramenta obrigatória caso suas aplicações necessitem guardar ou administrar arquivos / objetos. Ele veio justamente para você deixar de utilizar banco transacional (onde é necessário salvar no tipo IMAGE ou base64) ou File System, além de poder realizar controle de acesso aos containers e objetos.
Utilizar o Blob Storage é performático, simples, seguro e barato.
Os detalhes completos deste exemplo você encontra no meu GitHub: https://github.com/hgmauri/sample-azure-blob