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.
Ao clicar, irá abrir esse console:
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
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.
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:
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
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.
Crie no arquivo de configuração appsettings.json, com as configurações de chaves de acesso.
Edite seu arquivo Startup.cs, para que ele leia do arquivo de configuração a sua chave de acesso.
Crie uma nova controller na API e adicione um método POST para o upload da imagem.
Rode sua aplicação e vamos testar usando o 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:
Ao referenciar em um html, a imagem:
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: