Övning – Hämta blobreferenser

Slutförd

Om du vill interagera med en container i Blob Storage använder du ett BlobContainerClient objekt. Förutom att skapa containrar som du såg i den senaste lektionen kan ett BlobContainerClient objekt också användas för att lista blobarna i en container.

Visa blobar i en container

Hämta en lista över blobarna i en container med hjälp av BlobContainerClientmetoden 's GetBlobsAsync . I bakgrunden gör klienten ett eller flera HTTP-anrop till Azure för att lista alla blobar i containern. Eftersom den här metoden är asynkron behöver await du resultaten när du läser dem. Alla kanske inte returneras i ett enda HTTP-anrop. Följande kod visar standardmönstret för att läsa resultatet med en foreach loop.

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

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

Du kan hämta en lista över blobarna i en container med hjälp av listBlobs metoden i BlobContainerClient. I bakgrunden gör klienten ett eller flera HTTP-anrop till Azure för att lista alla blobar i containern. Den här metoden returnerar PagedIterable<BlobItem> som implementerar Iterable<BlobItem>. Du kan sedan läsa det ett objekt i taget eller efter sida med objekt. Följande kod visar standardmönstret för att läsa resultatet med en for loop.

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

Övning

En av funktionerna i appen kräver att du hämtar en lista med blobbar från API:et. Använd det mönster som tidigare visades för att visa en lista över alla blobar i containern. Du hittar namnet på varje blob när du bearbetar listan.

Använd redigeraren, ersätt GetNames i BlobStorage.cs med följande kod och spara ändringarna.

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

Bearbetar FilesController namnen som den här metoden returnerar för att omvandla namnen till URL:er. När de returneras till klienten återges namnen som hyperlänkar på sidan.

Ersätt listNames med BlobStorage.java i redigeringsprogrammet med följande kod och spara dina ändringar.

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

IndexBean och index.xhmtl bearbeta namnen som returneras av den här metoden för att återges som hyperlänkar på sidan.