Exercício – obter referências de blob
Para interagir com um contêiner no Armazenamento de Blob, use um BlobContainerClient
objeto. Além de criar contêineres como você viu na última unidade, um BlobContainerClient
objeto também pode ser usado para listar os blobs em um contêiner.
Listar blobs num contentor
Obtenha uma lista dos blobs em um contêiner usando BlobContainerClient
o GetBlobsAsync
método . 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 obter await
os resultados à medida que os lê. Eles podem não ser todos retornados em uma única chamada HTTP. O código a seguir mostra o padrão padrão para ler os resultados com um foreach
loop.
AsyncPageable<BlobItem> blobs = containerClient.GetBlobsAsync();
await foreach (var blob in blobs)
{
// Read the BlobItem and work with it here
}
Você pode obter uma lista dos blobs em um contêiner usando o listBlobs
método em BlobContainerClient
. Nos bastidores, o cliente faz uma ou mais chamadas HTTP para o Azure para listar todos os blobs no contêiner. Este método retorna PagedIterable<BlobItem>
que implementa Iterable<BlobItem>
. Em seguida, você pode lê-lo um item de cada vez ou por página de itens. O código a seguir mostra o padrão padrão para ler os resultados com um 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());
Exercício
Uma das funcionalidades na sua aplicação 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, obterá o nome de cada blob.
Usando o editor, substitua GetNames
BlobStorage.cs pelo código a seguir e salve as 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.
No editor, substitua listNames
no BlobStorage.java
pelo seguinte código e guarde as alterações.
public List<String> listNames() {
return blobContainerClient.listBlobs()
.stream()
.map(BlobItem::getName)
.collect(Collectors.toList());
}
IndexBean
e index.xhmtl
processar os nomes retornados por esse método para serem renderizados como hiperlinks na página.