Exercício – Obter referências de blob

Concluído

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.