Exercício – Obter referências de blob
Para interagir com um contêiner no Armazenamento de Blobs, use um objeto BlobContainerClient
. Além de criar contêineres como você viu na última unidade, um objeto BlobContainerClient
também pode ser usado para listar os blobs em um contêiner.
Listando os blobs de um contêiner
Obtenha uma lista dos blobs em um contêiner usando o método GetBlobsAsync
do BlobContainerClient
. Nos bastidores, o cliente faz uma ou mais chamadas HTTP para o Azure para listar todos os blobs no contêiner. Como esse método é assíncrono, você precisa dos resultados conforme await
os lê. Eles podem não ser todos retornados em uma única chamada HTTP. O código a seguir mostra o padrão para ler os resultados com um loop foreach
.
AsyncPageable<BlobItem> blobs = containerClient.GetBlobsAsync();
await foreach (var blob in blobs)
{
// Read the BlobItem and work with it here
}
Obtenha uma lista dos blobs de um contêiner usando o método listBlobs
em BlobContainerClient
. Nos bastidores, o cliente faz uma ou mais chamadas HTTP para o Azure para listar todos os blobs no contêiner. Esse método retorna PagedIterable<BlobItem>
que implementa Iterable<BlobItem>
. Você pode ler um item ou uma página de itens de cada vez. O código a seguir mostra o padrão para ler os resultados com um loop 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());
Exercício
Um dos recursos do aplicativo exige a obtenção de uma lista de blobs da API. Use o padrão mostrado anteriormente para listar todos os blobs em nosso contêiner. Ao processar a lista, você obtém o nome de cada blob.
Usando o editor, substitua GetNames
em BlobStorage.cs pelo código a seguir e salve suas alterações.
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;
}
O FilesController
processa os nomes que esse método retorna para transformar os nomes em URLs. Quando retornados ao cliente, os nomes são renderizados como hiperlinks na página.
Usando o editor, substitua listNames
em BlobStorage.java
pelo código a seguir e salve as alterações.
public List<String> listNames() {
return blobContainerClient.listBlobs()
.stream()
.map(BlobItem::getName)
.collect(Collectors.toList());
}
IndexBean
e index.xhmtl
processam os nomes retornados por esse método para serem renderizados como hiperlinks na página.