Übung: Abrufen von Blobverweisen

Abgeschlossen

Für die Interaktion mit einem Container in Blob Storage verwenden Sie ein BlobContainerClient-Objekt. Mit BlobContainerClient-Objekten können nicht nur wie in der letzten Lerneinheit Container erstellt, sondern auch die in einem Container verwendeten Blobs aufgelistet werden.

Auflisten von Blobs in einem Container

Rufen Sie mit der BlobContainerClient-Methode von GetBlobsAsync eine Liste der Blobs in einem Container ab. Im Hintergrund führt der Client mindestens einen HTTP-Aufruf an Azure aus, um alle Blobs im Container aufzulisten. Da es sich um eine asynchrone Methode handelt, müssen Sie die Ergebnisse beim Lesen mit await versehen. Sie werden möglicherweise nicht alle in einem einzigen HTTP-Aufruf zurückgegeben. Der folgende Code zeigt das Standardmuster für das Lesen der Ergebnisse mit einer foreach-Schleife.

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

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

Sie erhalten eine Liste der Blobs in einem Container mit der listBlobs-Methode im BlobContainerClient. Im Hintergrund führt der Client mindestens einen HTTP-Aufruf an Azure aus, um alle Blobs im Container aufzulisten. Diese Methode gibt PagedIterable<BlobItem> zurück, wodurch Iterable<BlobItem> implementiert wird. Elemente können dann einzeln oder seitenweise gelesen werden. Der folgende Code zeigt das Standardmuster für das Lesen der Ergebnisse mit einer for-Schleife.

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

Übung

Eines der Features in Ihrer App erfordert das Abrufen einer Liste von Blobs über die API. Verwenden Sie das zuvor gezeigte Muster, um alle Blobs in unserem Container aufzulisten. Bei der Verarbeitung der Liste sehen Sie die Namen der einzelnen Blobs.

Ersetzen Sie mit Hilfe des Editors GetNames in BlobStorage.cs durch den folgenden Code und speichern Sie Ihre Änderungen.

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 verarbeitet die Namen, die diese Methode zurückgibt, um die Namen in URLs umzuwandeln. Wenn sie an den Client zurückgegeben werden, werden sie als Hyperlinks auf der Seite gerendert.

Ersetzen Sie im Editor listNames in BlobStorage.java durch den folgenden Code, und speichern Sie die Änderungen.

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

IndexBean und index.xhmtl verarbeiten die von dieser Methode zurückgegebenen Namen, um sie als Hyperlinks auf der Seite darzustellen.