DownloadToByteArrayAsync: Download File from BlobStorage

DownloadToByteArrayAsync è una delle diverse possibilità messe a disposizione dal CloudBlockBlob per scaricare un file da un BlobStorage di cui abbiamo le credenziali. Per farlo sono necessarie davvero pochissime righe di codice e quelle che troverete qui sotto sono già pronte all’utilizzo.

Se desiderate vedere come caricare (upload) di un file nel BlobStorage tramite CloudBlockBlob UploadFromStreamAsync vi invito a leggere l’articolo della scorsa settimana dal titolo: CloudBlockBlob UploadFromStreamAsync: Upload File BlobStorage

Ora entriamo nel vivo dell’articolo mostrando il codice per scaricare il file desiderato.

DownloadToByteArrayAsync

DownloadFileFromBlobStorage (cs)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

using Microsoft.Azure.Storage;
using Microsoft.Azure.Storage.Blob;
using System.IO;
using System.Threading.Tasks;

[...]

public async Task<byte[]> DownloadFileFromBlobStorage(string storageConnection, string fileNameToDownload, string containerName)
{

    var cloudStorageAccount = CloudStorageAccount.Parse(storageConnection);

    var cloudBlobClient = cloudStorageAccount.CreateCloudBlobClient();

    var cloudBlobContainer = cloudBlobClient.GetContainerReference(containerName);
    bool containerExists =  cloudBlobContainer.ExistsAsync().Result;
    if (containerExists)
    {
        var blockBlobReference = cloudBlobContainer.GetBlockBlobReference(fileNameToDownload);

        if (await blockBlobReference.ExistsAsync())
        {
            await blockBlobReference.FetchAttributesAsync();
            var result = new byte[blockBlobReference.Properties.Length];

            int downloadByteLength = await blockBlobReference.DownloadToByteArrayAsync(result, 0);

            return result;
        }

    }

    return null;
} 

Ora vediamo come usare quanto appena proposto DownloadFileFromBlobStorage

1
2
3
4
5
6
7

FileToBlobStorage fileToBlobStorage = new FileToBlobStorage();
var fileByteArray =  fileToBlobStorage.DownloadFileFromBlobStorage(	"DefaultEndpointsProtocol=https;AccountName=XXX;AccountKey=YYY==;EndpointSuffix=core.windows.net",
	"FileNameToDownload.ext",
	"containerName"
).Result;

In questo momento abbiamo in mano un byte [] contenente il nostro file. Come possiamo utilizzarlo? Un esempio semplice è quello di scrivere l’array di byte su File System.

FileStream: Write byte array to File System

FileStream: Write byte array to File System

1
2
3
4
5
6
7

           using (var fs = new FileStream(@"C:\Temp\FileName.ext", FileMode.Create, FileAccess.Write))
            {
                fs.Write(fileByteArray, 0, fileByteArray.Length);
            }


Come potete vedere con pochissime righe di codice abbiamo ottenuto un gran risultato pronto ad essere utilizzabile in più contesti.