Ejercicio: obtención de referencias de blob
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.