Enumeración de blobs con JavaScript
En este artículo se muestra cómo enumerar blobs con la biblioteca cliente de Azure Storage para JavaScript.
Requisitos previos
- Los ejemplos de este artículo asumen que ya tiene un proyecto configurado para trabajar con la librería cliente Azure Blob Storage para JavaScript. Para obtener más información sobre la configuración del proyecto, incluida la instalación de paquetes, la importación de módulos y la creación de un objeto cliente autorizado para trabajar con recursos de datos, consulte Introducción a Azure Blob Storage y JavaScript.
- El mecanismo de autorización debe tener permisos para enumerar blobs. Para obtener más información, consulte la guía de autorización para la siguiente operación de la API de REST:
Acerca de las opciones de listado de blobs
Al enumerar blobs desde el código, puede especificar varias opciones para administrar cómo se devuelven los resultados de Azure Storage. Puede especificar el número de resultados que se van a devolver en cada conjunto de resultados y luego recuperar los conjuntos subsiguientes. Puede especificar un prefijo para devolver los blobs cuyos nombres comienzan por ese carácter o cadena. También puede enumerar los blobs en una estructura de lista plana o de forma jerárquica. Una lista jerárquica devuelve los blobs como si estuvieran organizados en carpetas.
Para enumerar los blobs de un contenedor usando una lista plana, llame al siguiente método:
Para enumerar los blobs de un contenedor usando una lista jerárquica, llame al siguiente método:
- ContainerClient.listBlobsByHierarcy
Administración del número de resultados que se devuelven
De forma predeterminada, una operación de enumeración devuelve hasta 5000 resultados a la vez, pero puede especificar el número de resultados que quiere que devuelva. En los ejemplos que se presentan en este artículo muestran cómo devolver resultados por páginas. Para más información sobre los conceptos de paginación, consulte Paginación con el SDK de Azure para JavaScript.
Filtrado de los resultados con un prefijo
Para filtrar la lista de blobs, especifique una cadena para la propiedad prefix
en ContainerListBlobsOptions. La cadena de prefijo puede incluir uno o varios caracteres. Después, Azure Storage solo devuelve los blobs cuyos nombres empiecen por ese prefijo. Por ejemplo, pasar la cadena sample-
de prefijo solo devuelve blobs cuyos nombres comienzan por sample-
.
Incluir metadatos de blobs u otra información
Para incluir metadatos de blob con los resultados, establezca la includeMetadata
propiedad true
en como parte de ContainerListBlobsOptions. También puede incluir instantáneas, etiquetas o versiones en los resultados estableciendo la propiedad adecuada a true
.
Lista plana frente a lista jerárquica
Los blobs de Azure Storage están organizados en un paradigma plano, en lugar de un paradigma jerárquico (como un sistema de archivos clásico). Sin embargo, los blobs se pueden organizar en directorios virtuales para imitar una estructura de carpetas. Un directorio virtual forma parte del nombre del blob y se indica mediante el carácter delimitador.
Para organizar los blobs en directorios virtuales, use un carácter delimitador en el nombre del blob. El carácter delimitador predeterminado es una barra diagonal (/), pero puede especificar cualquier carácter como delimitador.
Si usa un delimitador para asignar nombres a los blobs, puede optar por enumerar los blobs de forma jerárquica. En el caso de una operación de enumeración jerárquica, Azure Storage devuelve los directorios virtuales y los blobs que hay debajo del objeto primario. Puede llamar a la operación de enumeración de forma recursiva para recorrer la jerarquía, de manera similar a como se haría con un sistema de archivos clásico mediante programación.
Uso de una lista plana
De forma predeterminada, una operación de enumeración devuelve los blobs en una lista plana. En una lista plana, los blobs no se organizan por directorio virtual.
En el ejemplo siguiente se enumeran los blobs del contenedor especificado mediante una lista plana. En este ejemplo se incluyen instantáneas de blobs y versiones de blobs, si existen:
async function listBlobsFlat(containerClient) {
const maxPageSize = 2;
// Some options for filtering results
const listOptions = {
includeMetadata: true,
includeSnapshots: true,
prefix: '' // Filter results by blob name prefix
};
console.log("Blobs flat list (by page):");
for await (const response of containerClient
.listBlobsFlat(listOptions)
.byPage({ maxPageSize })) {
console.log("- Page:");
if (response.segment.blobItems) {
for (const blob of response.segment.blobItems) {
console.log(` - ${blob.name}`);
}
}
}
}
La salida es parecida a esta:
Blobs flat list (by page):
- Page:
- a1
- a2
- Page:
- folder1/b1
- folder1/b2
- Page:
- folder2/sub1/c
- folder2/sub1/d
Nota:
La salida de ejemplo que se muestra supone que ya tiene una cuenta de almacenamiento con un espacio de nombres plano. Si ha habilitado la característica de espacio de nombres jerárquico en su cuenta de almacenamiento, los directorios no son virtuales. En su lugar, son objetos independientes y concretos. Como resultado, los directorios aparecen en la lista como blobs de duración cero.
Para obtener una opción de lista alternativa al trabajar con un espacio de nombres jerárquico, consulte Lista de contenido del directorio (Azure Data Lake Storage).
Uso de una lista jerárquica
Cuando se llama a una operación de enumeración jerárquicamente, Azure Storage devuelve los directorios virtuales y los blobs en el primer nivel de la jerarquía.
Para enumerar los blobs jerárquicamente, use el método siguiente:
En el ejemplo siguiente se enumeran los blobs del contenedor especificado mediante una lista jerárquica. En este ejemplo, el parámetro de prefijo se establece inicialmente en una cadena vacía para enumerar todos los blobs del contenedor. A continuación, en el ejemplo se llama a la operación de lista de forma recursiva para recorrer la jerarquía de directorios virtuales y los blobs de lista.
// Recursively list virtual folders and blobs
async function listBlobHierarchical(containerClient, delimiter='/') {
const maxPageSize = 20;
// Some options for filtering list
const listOptions = {
prefix: '' // Filter results by blob name prefix
};
let i = 1;
console.log(`Folder ${delimiter}`);
for await (const response of containerClient
.listBlobsByHierarchy(delimiter, listOptions)
.byPage({ maxPageSize })) {
console.log(` Page ${i++}`);
const segment = response.segment;
if (segment.blobPrefixes) {
// Do something with each virtual folder
for await (const prefix of segment.blobPrefixes) {
// Build new delimiter from current and next
await listBlobHierarchical(containerClient, `${delimiter}${prefix.name}`);
}
}
for (const blob of response.segment.blobItems) {
// Do something with each blob
console.log(`\tBlobItem: name - ${blob.name}`);
}
}
}
La salida es parecida a esta:
Folder /
Page 1
BlobItem: name - a1
BlobItem: name - a2
Page 2
Folder /folder1/
Page 1
BlobItem: name - folder1/b1
BlobItem: name - folder1/b2
Folder /folder2/
Page 1
Folder /folder2/sub1/
Page 1
BlobItem: name - folder2/sub1/c
BlobItem: name - folder2/sub1/d
Page 2
BlobItem: name - folder2/sub1/e
Nota:
Las instantáneas de blob no se pueden enumerar en una operación de enumeración jerárquica.
Recursos
Para más información sobre cómo crear listas de blobs con la biblioteca cliente de Azure Blob Storage para JavaScript, consulte los recursos siguientes.
Ejemplos de código
- Ver JavaScript y ejemplos de código de TypeScript de este artículo (GitHub)
Operaciones de API REST
El SDK de Azure para JavaScript contiene bibliotecas que se crean a partir de la API REST de Azure, lo que le permite interactuar con las operaciones de API REST a través de paradigmas conocidos de JavaScript. Los métodos de la biblioteca cliente para crear listas de blobs usan esta operación de API de REST:
- Enumeración de blobs (API de REST)
Recursos de la biblioteca cliente
- Documentación de referencia de la biblioteca cliente
- Código fuente de la biblioteca del cliente
- Paquete (npm)