Back-End

22 mai, 2018

Utilizando Storage Blob Azure em ASP .NET Core

Publicidade

Olá, pessoal!

Quando desenvolvemos uma API, muitas vezes precisamos fazer upload de arquivos, e não sabemos se estamos fazendo da melhor forma. Ficamos na dúvida de fazer um upload com um Base64 ou via Form, mas questionamos depois disso:

Onde vamos hospedar essa imagem?

  • Será em banco de dados?
  • Como vai ficar a performance?
  • Colocamos em uma pasta no projeto?
  • E se meu projeto ficar grande?

Existem várias estratégias para isso, mas existe uma ferramenta ótima para reservar essas imagens, arquivos e etc. Um local que ficará fora de sua infra, e com isso ganhando agilidade e processamento para a sua aplicação. Essa ferramenta é o Storage Blog do Azure.

Utilizando essa ferramenta, hospedamos todas as imagens, arquivos e etc, neste serviço do Azure.

O primeiro passo é criar e configurar o storage em sua conta no Azure. Para isso, vamos utilizar o Cloud Shell do Azure. Ao lado direito superior de sua tela, existe o ícone do Cloud Shell.

Ícone do Cloud Shell

Ao clicar, irá abrir esse console:

Console Cloud Shell

Para a criação do storage, primeiramente precisamos criar um grupo de recursos de controle do storage. Utilize esse comando:

az group create --name [nome do seu recurso] -- location brazilsouth

No exemplo eu criei um grupo de recursos de nome StorageTeste.

Grupo de recursos criado no Azure

Depois disso, precisamos criar uma conta de armazenamento para o storage. Utilize esse comando:

az storage account create –name [nome do storage ]\
–location brazilsouth –resource-group [nome do seu recurso]\
–sku Standard_LRS \
–kind BlobStorage \
–access-tier Hot

No exemplo eu criei uma conta de armazenamento storagetesteexemplo.

Conta de armazenamento criada. Dentro desta conta de armazenamento, vamos criar um container para o armazenamento das imagens. Esse container vai se chamar image.

Criação do container

Criação do container image

Agora vamos criar uma API que irá receber uma imagem via request e fazer o armazenamento do mesmo neste storage que criamos dentro do Azure.

Criando uma API

Vamos adicionar as seguintes referências do NUGET:

PM> install-package WindowsAzure.Storage

A referência WindowsAzure.Storage será para fazer o Upload da imagem no storage do Azure. Criei na estrutura da API, duas pastas com seus objetos conforme imagem abaixo:

Criação de pastas

Adicionei as classes:

  • StorageConfig.cs: classe onde receberá os dados da conta de armazenamento do Azure.
  • StorageHelper.cs; será a classe responsável para a comunicação e upload da imagem ao storage do Azure
  • JsonImage: será uma entidade de retorno da url da imagem no storage

Na classe StorageHelper.cs, existe o método:

UploadFileToStorage

Método que irá fazer o upload no storage

Agora preciso criar a conexão da minha aplicação com o Azure. Para isso, existe na conta de armazenamento do Azure chaves de conexão do serviço que ficam armazenadas nas configurações da conta, na opção Chaves de acesso.

Chaves de acesso

Crie no arquivo de configuração appsettings.json, com as configurações de chaves de acesso.

Configuração da chave de acesso

Edite seu arquivo Startup.cs, para que ele leia do arquivo de configuração a sua chave de acesso.

Obtendo a chave do arquivo de configuração

Crie uma nova controller na API e adicione um método POST para o upload da imagem.

Método Post de upload de imagem

Rode sua aplicação e vamos testar usando o Postman!

Upload de imagem no postman

Adicione a imagem, como se fosse um site fazendo o upload. Na chave, coloque o nome “file”, pois é o mesmo nome do parâmetro do método na API e depois execute.

A API irá retornar sucesso com o retorno do endereço http da imagem:

Retorno do endereço da imagem no storage

Ao referenciar em um html, a imagem:

Imagem do storage

Bom, pessoal, espero que tenham gostado deste artigo! Uma ótima ferramenta para resolver uploads de arquivos em suas aplicações usando o Azure e .NET Core. Segue solution desse exemplo no meu GitHub: