Exercice : Obtenir des références sur les objets blob
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.