Gyakorlat – Blobreferenciák lekérése

Befejeződött

A Blob Storage tárolóinak használatához használjon objektumot BlobContainerClient . Az előző leckében látott tárolók létrehozása mellett egy BlobContainerClient objektum is használható a tárolóban lévő blobok listázására.

Tároló blobjainak listázása

A tárolóban lévő blobok listájának lekérése GetBlobsAsync a metódus használatávalBlobContainerClient. A háttérben az ügyfél egy vagy több HTTP-hívást indít az Azure-ba a tároló összes blobjának listázásához. Mivel ez a módszer aszinkron, olvasáskor az eredményeket kell await elvégeznie. Előfordulhat, hogy nem mindegyik lesz visszaadva egyetlen HTTP-hívásban. Az alábbi kód az eredmények ciklussal foreach való olvasásának szabványos mintáját mutatja.

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

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

A tárolóban lévő blobok listáját a listBlobs következő metódussal szerezheti be BlobContainerClient: . A háttérben az ügyfél egy vagy több HTTP-hívást indít az Azure-ba a tároló összes blobjának listázásához. Ez a metódus a megvalósító metódust PagedIterable<BlobItem>Iterable<BlobItem>adja vissza. Ezt követően egyszerre vagy egy elemoldalon is elolvashatja. Az alábbi kód az eredmények ciklussal for való olvasásának szabványos mintáját mutatja.

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

Gyakorlat

Az alkalmazásunk egyik funkciójához le kell kérnünk egy bloblistát az API-ból. A korábban bemutatott mintával listázhatja a tárolóban lévő összes blobot. A lista feldolgozása során minden egyes blob nevét megkapjuk.

A szerkesztő használatával cserélje le GetNames a BlobStorage.cs fájlt a következő kódra, és mentse a módosításokat.

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

A FilesController metódus által visszaadott neveket a metódus feldolgozza, hogy a neveket URL-címekké alakítsa. Amikor visszakerül az ügyfélhez, a nevek hivatkozásként jelennek meg a lapon.

A szerkesztő használatával cserélje le a BlobStorage.javalistNames elemét a következő kódra, majd mentse a módosításokat.

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

IndexBean és index.xhmtl dolgozza fel a metódus által visszaadott neveket, hogy hivatkozásként jelenjenek meg az oldalon.