Esercizio - Ottenere riferimenti a BLOB
Per interagire con un contenitore in Archiviazione BLOB di Azure, usare un oggetto BlobContainerClient
. Oltre a creare contenitori come illustrato nell'ultima unità, è anche possibile usare un oggetto BlobContainerClient
per elencare i BLOB in un contenitore.
Elenco dei BLOB in un contenitore
Ottenere un elenco dei BLOB in un contenitore usando il metodo GetBlobsAsync
di BlobContainerClient
. Il client effettua in background una o più chiamate HTTP ad Azure per elencare tutti i BLOB nel contenitore. Poiché questo metodo è asincrono, è necessario await
i risultati durante la lettura. Potrebbero non essere restituiti tutti in una singola chiamata HTTP. Il codice seguente illustra il modello standard per la lettura dei risultati con un ciclo foreach
.
AsyncPageable<BlobItem> blobs = containerClient.GetBlobsAsync();
await foreach (var blob in blobs)
{
// Read the BlobItem and work with it here
}
È possibile ottenere un elenco dei BLOB in un contenitore usando il metodo listBlobs
in BlobContainerClient
. Il client effettua in background una o più chiamate HTTP ad Azure per elencare tutti i BLOB nel contenitore. Questo metodo restituisce PagedIterable<BlobItem>
che implementa Iterable<BlobItem>
. È quindi possibile leggere un elemento alla volta o per pagina di elementi. Il codice seguente illustra il modello standard per la lettura dei risultati con un ciclo for
.
for (BlobItem blob : blobContainerClient.listBlobs()) {
// Read the BlobItem and work with it here
}
blobContainerClient.listBlobs()
.stream()
.map(blobItem -> /* Read the BlobItem and work with it here */)
.collect(Collectors.toList());
Esercizio
Una delle funzionalità dell'app richiede il recupero di un elenco di BLOB dall'API. Usare il modello illustrato sopra per elencare tutti i BLOB nel contenitore. Elaborando l'elenco si ottiene il nome di ogni BLOB.
Usando l'editor, sostituire GetNames
in BlobStorage.cs con il codice seguente e salvare le modifiche.
public async Task<IEnumerable<string>> GetNames()
{
List<string> names = new List<string>();
BlobServiceClient blobServiceClient = new BlobServiceClient(storageConfig.ConnectionString);
// Get the container the blobs are saved in
BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(storageConfig.FileContainerName);
// This gets the info about the blobs in the container
AsyncPageable<BlobItem> blobs = containerClient.GetBlobsAsync();
await foreach (var blob in blobs)
{
names.Add(blob.Name);
}
return names;
}
FilesController
Elabora i nomi restituiti da questo metodo per trasformare i nomi in URL. Nel momento in cui i nomi vengono restituiti al client, ne viene eseguito il rendering come collegamenti ipertestuali nella pagina.
Usando l'editor, sostituire listNames
in BlobStorage.java
con il codice seguente e salvare le modifiche.
public List<String> listNames() {
return blobContainerClient.listBlobs()
.stream()
.map(BlobItem::getName)
.collect(Collectors.toList());
}
IndexBean
e index.xhmtl
elaborano i nomi restituiti da questo metodo per eseguirne il rendering come collegamenti ipertestuali nella pagina.