Oefening - Blob-verwijzingen ophalen
Als u wilt communiceren met een container in Blob Storage, gebruikt u een BlobContainerClient
object. Naast het maken van containers zoals u in de laatste eenheid hebt gezien, kan een BlobContainerClient
object ook worden gebruikt om de blobs in een container weer te geven.
Blobs in een container vermelden
Haal een lijst met de blobs in een container op met behulp van BlobContainerClient
de GetBlobsAsync
methode. Achter de schermen voert de client een of meer HTTP-aanroepen naar Azure uit om alle blobs in de container weer te geven. Omdat deze methode asynchroon is, hebt u de resultaten nodig await
terwijl u ze leest. Ze worden mogelijk niet allemaal geretourneerd in één HTTP-aanroep. De volgende code toont het standaardpatroon voor het lezen van de resultaten met een foreach
lus.
AsyncPageable<BlobItem> blobs = containerClient.GetBlobsAsync();
await foreach (var blob in blobs)
{
// Read the BlobItem and work with it here
}
U kunt een lijst met de blobs in een container ophalen met behulp van de listBlobs
methode in BlobContainerClient
. Achter de schermen voert de client een of meer HTTP-aanroepen naar Azure uit om alle blobs in de container weer te geven. Deze methode retourneert PagedIterable<BlobItem>
die implementeert Iterable<BlobItem>
. U kunt het vervolgens één item tegelijk of op pagina met items lezen. De volgende code toont het standaardpatroon voor het lezen van de resultaten met een for
lus.
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());
Oefening
Voor een van de functies in de app moet een lijst met blobs uit de API worden opgehaald. Gebruik het patroon dat eerder is weergegeven om alle blobs in de container weer te geven. Tijdens het verwerken van de lijst worden de namen van alle blobs opgehaald.
Vervang de editor GetNames
in BlobStorage.cs door de volgende code en sla uw wijzigingen op.
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;
}
De FilesController
namen die met deze methode worden geretourneerd, worden verwerkt om de namen om te zetten in URL's. Wanneer de namen worden geretourneerd naar de client, worden de namen weergegeven als hyperlinks op de pagina.
Vervang in de editor listNames
in BlobStorage.java
door de volgende code en sla de wijzigingen op.
public List<String> listNames() {
return blobContainerClient.listBlobs()
.stream()
.map(BlobItem::getName)
.collect(Collectors.toList());
}
IndexBean
en index.xhmtl
verwerkt u de namen die door deze methode worden geretourneerd om te worden weergegeven als hyperlinks op de pagina.