Esercizio - Ottenere riferimenti a BLOB

Completato

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.