Oefening - Blob-verwijzingen ophalen

Voltooid

Als u wilt communiceren met een container in Blob Storage, gebruikt u een BlobContainerClient object. Naast het maken van containers zoals u in de laatste eenheid hebt gezien, kan een BlobContainerClient object ook worden gebruikt om de blobs in een container weer te geven.

Blobs in een container vermelden

Haal een lijst met de blobs in een container op met behulp van BlobContainerClientde GetBlobsAsync methode. Achter de schermen voert de client een of meer HTTP-aanroepen naar Azure uit om alle blobs in de container weer te geven. Omdat deze methode asynchroon is, hebt u de resultaten nodig await terwijl u ze leest. Ze worden mogelijk niet allemaal geretourneerd in één HTTP-aanroep. De volgende code toont het standaardpatroon voor het lezen van de resultaten met een foreach lus.

AsyncPageable<BlobItem> blobs = containerClient.GetBlobsAsync();

await foreach (var blob in blobs)
{
    // Read the BlobItem and work with it here
}

U kunt een lijst met de blobs in een container ophalen met behulp van de listBlobs methode in BlobContainerClient. Achter de schermen voert de client een of meer HTTP-aanroepen naar Azure uit om alle blobs in de container weer te geven. Deze methode retourneert PagedIterable<BlobItem> die implementeert Iterable<BlobItem>. U kunt het vervolgens één item tegelijk of op pagina met items lezen. De volgende code toont het standaardpatroon voor het lezen van de resultaten met een for lus.

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());

Oefening

Voor een van de functies in de app moet een lijst met blobs uit de API worden opgehaald. Gebruik het patroon dat eerder is weergegeven om alle blobs in de container weer te geven. Tijdens het verwerken van de lijst worden de namen van alle blobs opgehaald.

Vervang de editor GetNames in BlobStorage.cs door de volgende code en sla uw wijzigingen op.

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;
}

De FilesController namen die met deze methode worden geretourneerd, worden verwerkt om de namen om te zetten in URL's. Wanneer de namen worden geretourneerd naar de client, worden de namen weergegeven als hyperlinks op de pagina.

Vervang in de editor listNames in BlobStorage.java door de volgende code en sla de wijzigingen op.

public List<String> listNames() {
    return blobContainerClient.listBlobs()
      .stream()
      .map(BlobItem::getName)
      .collect(Collectors.toList());
}

IndexBean en index.xhmtl verwerkt u de namen die door deze methode worden geretourneerd om te worden weergegeven als hyperlinks op de pagina.