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.
Link Utili: