Fazendo o upload de arquivo para o Windows Azure BLOB Storage
Olá pessoal,
Tenho notado um cenário bastante comum de aplicações que é a necessidade de fazer upload de informações para o Windows Azure BLOB Storage, então resolvi fazer um post sobre o assunto mostrando um exemplo e ir explicando os seus passos.
O primeiro passo necessário é acessar uma conta do Storage, que é feito conforme abaixo:
CloudStorageAccount storageAccount =
CloudStorageAccount.Parse(connectionString);
Notem que uma connection string é necessária e ela pode variar de acordo com o ambiente que o código rodar. No ambiente local de desenvolvimento, utilizando o storage emulator, a string será “UseDevelopmentStorage=true”. Já no ambiente de produção do Windows Azure ela deve ter um formato similar ao seguinte “DefaultEndpointsProtocol=https;AccountName=<Sua Conta>;AccountKey=<Sua Chave>”, notem o uso do https, bastante recomendado para comunicação através da internet.
Para saber qual a sua chave de acesso ao Windows Azure Storage, acesse o portal https://windows.azure.com com a sua conta, escolha a opção de storage e visualize a primary ou a secondary key do lado direito, conforme print abaixo:
Depois disso, precisamos instanciar um CloudBlobClient para ter acesso ao Container, que precisamos garantir que existe e depois ter acesso ao Blob em si:
CloudBlobClient blobClient =
storageAccount.CreateCloudBlobClient();
CloudBlobContainer container =
new CloudBlobContainer(containerUri.ToLower(), blobClient);
container.CreateIfNotExist();
CloudBlob blob = container.GetBlobReference(
Path.GetFileName(filePath.ToLower()));
Notem que chamo o método CreateIrNotExist do container, assim garanto que ele sempre existirá antes de tentar gravar algum Blob dentro dele.
Depois de ter a instância do Blob para trabalhar, posso fazer upload algum conteúdo:
blob.UploadFile(filePath);
Um ponto importante que precisa ser notado, é que todas as referências de endereço nos Blobs e Containers precisam ser lowercase, garanto isso chamando o método ToLower em todas as Uris.
O código completo ficaria assim:
CloudStorageAccount storageAccount =
CloudStorageAccount.Parse(connectionString);
CloudBlobClient blobClient =
storageAccount.CreateCloudBlobClient();
CloudBlobContainer container =
new CloudBlobContainer(containerUri.ToLower(), blobClient);
container.CreateIfNotExist();
CloudBlob blob = container.GetBlobReference(
Path.GetFileName(filePath.ToLower()));
blob.UploadFile(filePath);
RG