Ejercicio: obtención de referencias de blob

Completado

Para interactuar con un contenedor en Blob Storage, use un objeto BlobContainerClient. Además de crear contenedores como vimos en la última unidad, también se puede usar un objeto BlobContainerClient para enumerar los blobs de un contenedor.

Enumeración de blobs en un contenedor

Obtenga una lista de los blobs en un contenedor con el método GetBlobsAsync de BlobContainerClient. En segundo plano, el cliente realiza una o varias llamadas HTTP a Azure para enumerar todos los blobs del contenedor. Dado que este método es asincrónico, debe await los resultados a medida que los lea. Es posible que no se devuelvan todos en una sola llamada HTTP. El código siguiente muestra el patrón estándar para leer los resultados con un bucle foreach.

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

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

Puede obtener una lista de los blobs en un contenedor con el método BlobContainerClient en listBlobs. En segundo plano, el cliente realiza una o varias llamadas HTTP a Azure para enumerar todos los blobs del contenedor. Este método devuelve PagedIterable<BlobItem> que implementa Iterable<BlobItem>. Después, puede leerlo de un elemento a la vez o por página de elementos. El código siguiente muestra el patrón estándar para leer los resultados con un bucle 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());

Ejercicio

Una de las características de su aplicación requiere obtener una lista de blobs de la API. Use el patrón mostrado anteriormente para enumerar todos los blobs del contenedor. A medida que procesa la lista, obtiene el nombre de cada blob.

Con el editor, reemplace GetNames en BlobStorage.cs por el código siguiente y guarde los cambios.

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

FilesController procesa los nombres que devuelve este método para convertir los nombres en direcciones URL. Cuando se devuelven al cliente, los nombres se representan como hipervínculos en la página.

Abra listNames en el editor, reemplace BlobStorage.java por el siguiente código y guarde los cambios.

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

IndexBean y index.xhmtl procesan los nombres devueltos por este método para que se representen como hipervínculos en la página.