Listar blobs com JavaScript
Esse artigo mostra como listar blobs usando a biblioteca de clientes do Armazenamento do Microsoft Azure para JavaScript.
Pré-requisitos
- Os exemplos neste artigo pressupõem que você já tenha um projeto configurado para trabalhar com a biblioteca de clientes do Armazenamento de Blobs do Azure para JavaScript. Para saber mais sobre a configuração do seu projeto, incluindo a instalação de pacotes, a importação de módulos e a criação de um objeto cliente autorizado para trabalhar com recursos de dados, confira Introdução ao Armazenamento de Blobs do Azure e o JavaScript.
- O mecanismo de autorização deve ter permissões para listar contêineres de blob. Para saber mais, consulte as diretrizes de autorização para as seguintes operações de API REST:
Sobre as opções de listagem de blobs
Ao listar blobs do seu código, você pode especificar várias opções para gerenciar o modo como os resultados são retornados do Armazenamento do Azure. Você pode especificar o número de resultados a serem retornados em cada conjunto de resultados e, em seguida, recuperar os conjuntos subsequentes. Você pode especificar um prefixo para retornar os blobs cujos nomes começam com esse caractere ou cadeia de caracteres. Além disso, você pode listar os blobs em uma estrutura de listagem plana ou hierarquicamente. Uma listagem hierárquica retorna blobs como se eles estivessem organizados em pastas.
Para listar os blobs em uma conta de armazenamento, crie um ContainerClient e chame um destes métodos:
- ContainerClient.listBlobsByHierarcy
- ContainerClient.listBlobsFlat
A funcionalidade relacionada pode ser encontrada nos seguintes métodos:
- BlobServiceClient.findBlobsByTag
- ContainerClient.findBlobsByTag
Gerenciar quantos resultados são retornados
Por padrão, uma operação de listagem retorna até 5.000 resultados por vez, mas você pode especificar o número de resultados que deseja que cada operação de listagem retorne. Os exemplos apresentados neste artigo mostram como retornar resultados em páginas. Para saber mais sobre os conceitos de paginação, confira Paginação com o SDK do Azure para JavaScript.
Filtrar resultados com um prefixo
Para filtrar a lista de blobs, especifique uma cadeia de caracteres para a propriedade prefix
em ContainerListBlobsOptions. A cadeia de caracteres de prefixo pode incluir um ou mais caracteres. O Armazenamento do Azure então retorna somente os blobs cujos nomes começam com esse prefixo.
const listOptions = {
includeCopy: false, // include metadata from previous copies
includeDeleted: false, // include deleted blobs
includeDeletedWithVersions: false, // include deleted blobs with versions
includeLegalHold: false, // include legal hold
includeMetadata: true, // include custom metadata
includeSnapshots: true, // include snapshots
includeTags: true, // include indexable tags
includeUncommitedBlobs: false, // include uncommitted blobs
includeVersions: false, // include all blob version
prefix: '' // filter by blob name prefix
};
Retornar metadados
Você pode retornar metadados de blob com os resultados especificando a propriedade includeMetadata
nas opções de lista.
Listagem plana versus listagem hierárquica
Os blobs no Armazenamento do Azure são organizados em um paradigma simples em vez de um paradigma hierárquico (como um sistema de arquivos clássico). No entanto, você pode organizar blobs em diretórios virtuais para imitar uma estrutura de pastas. Um diretório virtual faz parte do nome do blob e é indicado pelo caractere delimitador.
Para organizar blobs em diretórios virtuais, use um caractere delimitador no nome do blob. O caractere delimitador padrão é uma barra (/), mas você pode especificar qualquer caractere como o delimitador.
Se você nomear seus blobs usando um delimitador, poderá optar por listar os blobs hierarquicamente. Para uma operação de listagem hierárquica, o Armazenamento do Azure retornará os diretórios virtuais e blobs que estiverem abaixo do objeto pai. Você pode chamar a operação de listagem recursivamente para percorrer a hierarquia, semelhante ao modo como você percorreria um sistema de arquivos clássico programaticamente.
Usar uma listagem plana
Por padrão, uma operação de listagem retorna blobs em uma listagem plana. Em uma listagem plana, os blobs não são organizados por diretório virtual.
O exemplo a seguir lista os blobs no contêiner especificado usando a listagem fixa.
async function listBlobsFlatWithPageMarker(containerClient) {
// page size - artificially low as example
const maxPageSize = 2;
let i = 1;
let marker;
// some options for filtering list
const listOptions = {
includeMetadata: false,
includeSnapshots: false,
includeTags: false,
includeVersions: false,
prefix: ''
};
let iterator = containerClient.listBlobsFlat(listOptions).byPage({ maxPageSize });
let response = (await iterator.next()).value;
// Prints blob names
for (const blob of response.segment.blobItems) {
console.log(`Flat listing: ${i++}: ${blob.name}`);
}
// Gets next marker
marker = response.continuationToken;
// Passing next marker as continuationToken
iterator = containerClient.listBlobsFlat().byPage({
continuationToken: marker,
maxPageSize: maxPageSize * 2
});
response = (await iterator.next()).value;
// Prints next blob names
for (const blob of response.segment.blobItems) {
console.log(`Flat listing: ${i++}: ${blob.name}`);
}
}
A saída de exemplo deverá ser semelhante a:
Flat listing: 1: a1
Flat listing: 2: a2
Flat listing: 3: folder1/b1
Flat listing: 4: folder1/b2
Flat listing: 5: folder2/sub1/c
Flat listing: 6: folder2/sub1/d
Observação
A saída de exemplo mostrada pressupõe que você tenha uma conta de armazenamento com um namespace simples. Se você habilitou o recurso de namespace hierárquico em sua conta de armazenamento, os diretórios não são virtuais. Em vez disso, eles são objetos concretos e independentes. Como resultado, os diretórios aparecem na lista como blobs de comprimento zero.
Para obter uma opção de listagem alternativa ao trabalhar com um namespace hierárquico, confira Listar conteúdo de diretório (Azure Data Lake Storage Gen2).
Usar uma listagem hierárquica
Quando você chama uma operação de listagem hierarquicamente, o Armazenamento do Azure retorna os diretórios virtuais e os blobs no primeiro nível da hierarquia.
Para listar os blobs hierarquicamente, chame o método BlobContainerClient.listBlobsByHierarchy.
O exemplo a seguir lista os blobs no contêiner especificado usando uma listagem hierárquica, com um tamanho de segmento opcional especificado, e grava o nome do blob na janela do console.
// Recursively list virtual folders and blobs
// Pass an empty string for prefixStr to list everything in the container
async function listBlobHierarchical(containerClient, prefixStr) {
// page size - artificially low as example
const maxPageSize = 2;
// some options for filtering list
const listOptions = {
includeMetadata: false,
includeSnapshots: false,
includeTags: false,
includeVersions: false,
prefix: prefixStr
};
let delimiter = '/';
let i = 1;
console.log(`Folder ${delimiter}${prefixStr}`);
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 prefix from current virtual folder
await listBlobHierarchical(containerClient, prefix.name);
}
}
for (const blob of response.segment.blobItems) {
// Do something with each blob
console.log(`\tBlobItem: name - ${blob.name}`);
}
}
}
A saída de exemplo deverá ser semelhante a:
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
Observação
Os instantâneos de blob não podem ser listados em uma operação de listagem hierárquica.
Recursos
Para saber mais sobre como listar blobs usando a biblioteca de clientes do Armazenamento de Blobs do Azure para JavaScript, consulte os recursos a seguir.
Operações da API REST
O SDK do Azure para JavaScript contém bibliotecas que se baseiam na API REST do Azure, permitindo a interação com as operações de API REST por meio de paradigmas conhecidos do JavaScript. Os métodos da biblioteca de clientes para listar blobs usam a seguinte operação de API REST:
- Listar blobs (REST API)
Exemplos de código
Recursos da biblioteca de clientes
- Documentação de referência da biblioteca de clientes
- Código-fonte da biblioteca de clientes
- Pacote (npm)