Caricare un file sul blob storage azure
Caricare un file del blob storage è molto semplice e si può fare il tutto con poche righe di codice. Preliminare all'esecuzione del codice è un account azure su cui abbiamo già attivato il servizio di storage, per intenderci quello dello screenshot sotto.
Creato un progetto di qualunque tipo, ad esempio web o console application, è innanzitutto necessario installare i seguenti pacchetti nuget:
- Microsoft.WindowsAzure.ConfigurationManager
- WindowsAzure.Storage
Successivamente va inserita la stringa di connessione nel file di configurazione specifico della nostra applicazione. Nel caso di una console application la inseriremo come chiave nella sezione AppSetting dell'app.config.
I valori che vanno configurati sono AccountName con il nome dello storage account creato in precedente e account key una chiave di sicurezza che si può recuperare dal portale Azure nel menu "Access Keys" dello storage account
In ultimo non ci rimane che vedere il codice. Per poter inserire un file nel blob è necessario prima creare un container, una sorta di cartella, che conterrà i nostri file. Nello snippet sotto vediamo come settare accesso pubblico ai nostri file, attenzione che la l'indirizzo del file sarà case sensitive!
var fileName = @"c:\temp\example.txt"; using (var fs = new FileStream(fileName, FileMode.Open)) { var storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString")); var blobClient = storageAccount.CreateCloudBlobClient(); var container = blobClient.GetContainerReference("myContainer"); // creiamo il container se non esiste, i container possono essere creati all'interno del portale azure container.CreateIfNotExists(); // settiamo accesso pubblico per i file del nostro blob, il che significa che saranno accessibili con url da utenti anonimi container.SetPermissions(new BlobContainerPermissions { PublicAccess = BlobContainerPublicAccessType.Blob }); var blockBlob = container.GetBlockBlobReference(fileName.ToLowerInvariant()); blockBlob.UploadFromStream(fs); }