Exercice : Obtenir des références sur les objets blob

Effectué

Pour interagir avec un conteneur dans Stockage Blob, utilisez un objet BlobContainerClient. En plus de créer des conteneurs comme vous l’avez vu dans la dernière unité, un objet BlobContainerClient peut également être utilisé pour lister les objets blob dans un conteneur.

Afficher les objets blob figurant dans un conteneur

Obtenez une liste des objets blob figurant dans un conteneur en utilisant la méthode GetBlobsAsync du BlobContainerClient. En arrière-plan, le client effectue un ou plusieurs appels HTTP vers Azure pour lister tous les objets Blob du conteneur. Étant donné que cette méthode est asynchrone, vous devez await les résultats lorsque vous les lisez. Ils peuvent ne pas tous être retournés dans un seul appel HTTP. Le code suivant montre le modèle standard de lecture des résultats avec une boucle foreach.

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

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

Vous pouvez obtenir la liste des objets blob figurant dans un conteneur en utilisant la méthode BlobContainerClient dans listBlobs. En arrière-plan, le client effectue un ou plusieurs appels HTTP vers Azure pour lister tous les objets Blob du conteneur. Cette méthode retourne un PagedIterable<BlobItem> qui implémente Iterable<BlobItem>. Vous pouvez ensuite lire un élément à la fois ou par page d’éléments. Le code suivant montre le modèle standard de lecture des résultats avec une boucle 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());

Exercice

L’une des fonctionnalités de votre application nécessite l’obtention d’une liste d’objets blobs à partir de l’API. Utilisez le modèle présenté précédemment pour lister tous les objets blob présents dans notre conteneur. Au fur et à mesure que vous traitez la liste, vous obtenez le nom de chaque objet blob.

À l’aide de l’éditeur, remplacez GetNames dans BlobStorage.cs par le code suivant, puis enregistrez vos modifications.

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

Le FilesController traite les noms retournés par cette méthode pour transformer les noms en URL. Quand ils sont retournés au client, les noms sont restitués sous forme de liens hypertexte dans la page.

À l’aide de l’éditeur, remplacez listNames dans BlobStorage.java par le code suivant, puis enregistrez vos changements.

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

IndexBean et index.xhmtl traitent les noms retournés par cette méthode pour les restituer sous forme de liens hypertextes dans la page.