列出带有 TypeScript 的 Blob 容器
通过代码列出 Azure 存储帐户中的容器时,可以指定多个选项来管理如何从 Azure 存储返回结果。 本文介绍如何使用适用于 JavaScript 的 Azure 存储客户端库列出容器。
先决条件
- 本文中的示例假设你已经设置了一个项目来使用适用于 JavaScript 的 Azure Blob 存储客户端库。 若要了解如何设置项目(包括安装包、导入模块,以及创建授权客户端对象来使用数据资源),请参阅开始使用 Azure Blob 存储和 TypeScript。
- 授权机制必须具有列出 blob 容器的权限。 要了解详细信息,请参阅以下 REST API 操作的授权指南:
关于容器列出选项
若要列出存储帐户中的容器,请创建 BlobServiceClient 对象,然后调用以下方法:
- BlobServiceClient.listContainers
列出具有可选前缀的容器
默认情况下,列出操作每次最多返回 5000 个结果。
BlobServiceClient.listContainers 返回 ContainerItem 对象列表。 使用 containerItem.name 创建 ContainerClient 以获取更完整的 ContainerProperties 对象。
// return up to 5000 containers
async function listContainers(
blobServiceClient: BlobServiceClient,
containerNamePrefix: string
): Promise<void> {
const options: ServiceListContainersOptions = {
includeDeleted: false,
includeMetadata: true,
includeSystem: true,
prefix: containerNamePrefix
};
for await (const containerItem of blobServiceClient.listContainers(options)) {
// ContainerItem
console.log(`For-await list: ${containerItem.name}`);
// ContainerClient
const containerClient: ContainerClient =
blobServiceClient.getContainerClient(containerItem.name);
// ... do something with container
// containerClient.listBlobsFlat({ includeMetadata: true,
// includeSnapshots: false,
// includeTags: true,
// includeVersions: false,
// prefix: ''});
}
}
列出包含分页的容器
若要返回更小的结果集,请为要返回的结果页的大小提供非零值。
如果存储帐户包含 5000 个以上的容器,或者你指定了页面大小,以便列表操作返回存储帐户中的容器子集,则 Azure 存储将返回一个包含容器列表的延续令牌。 继续标记是一个不透明值,可用于从 Azure 存储中检索下一组结果。
在代码中检查延续令牌的值,以确定它是否为空。 如果延续令牌为空,则表示结果集是完整的。 如果延续令牌不为空,则再次调用列出方法,并传入延续令牌以检索下一组结果,直到延续令牌为空。
async function listContainersWithPagingMarker(
blobServiceClient: BlobServiceClient
) {
// add prefix to filter list
const containerNamePrefix = '';
// page size
const maxPageSize = 2;
const options: ServiceListContainersOptions = {
includeDeleted: false,
includeMetadata: true,
includeSystem: true,
prefix: containerNamePrefix
};
let i = 1;
let iterator = blobServiceClient
.listContainers(options)
.byPage({ maxPageSize });
let response = (await iterator.next()).value;
// Prints 2 container names
if (response.containerItems) {
for (const container of response.containerItems) {
console.log(`IteratorPaged: Container ${i++}: ${container.name}`);
}
}
// Gets next marker
const marker = response.continuationToken;
// Passing next marker as continuationToken
iterator = blobServiceClient
.listContainers()
.byPage({ continuationToken: marker, maxPageSize: maxPageSize * 2 });
response = (await iterator.next()).value;
// Print next 4 container names
if (response.containerItems) {
for (const container of response.containerItems) {
console.log(`Container ${i++}: ${container.name}`);
}
}
}
使用 listContainers 方法的选项参数筛选带有前缀的结果。
使用前缀筛选结果
若要筛选容器列表,请为 prefix 属性指定一个字符串。 前缀字符串可以包含一个或多个字符。 然后,Azure 存储只返回其名称以该前缀开头的容器。
async function listContainers(
blobServiceClient: BlobServiceClient,
containerNamePrefix: string
) {
const options: ServiceListContainersOptions = {
includeDeleted: false,
includeMetadata: true,
includeSystem: true,
// filter by prefix
prefix: containerNamePrefix
};
for await (const containerItem of blobServiceClient.listContainers(options)) {
// do something with containerItem
}
}
在结果中包含元数据
若要连同结果一起返回容器元数据,请指定为 BlobContainerTraits 枚举指定元数据值。 Azure 存储包含返回的每个容器的元数据,因此不需要将容器元数据提取为单独操作。
async function listContainers(
blobServiceClient: BlobServiceClient,
containerNamePrefix: string
) {
const options: ServiceListContainersOptions = {
includeDeleted: false,
includeSystem: true,
prefix: containerNamePrefix,
// include metadata
includeMetadata: true,
};
for await (const containerItem of blobServiceClient.listContainers(options)) {
// do something with containerItem
}
}
资源
若要详细了解如何使用适用于 JavaScript 的 Azure Blob 存储客户端库来列出容器,请参阅以下资源。
REST API 操作
Azure SDK for JavaScript 包含基于 Azure REST API 而生成的库,允许你通过熟悉的 JavaScript 范例与 REST API 操作进行交互。 用于列出容器的客户端库方法使用以下 REST API 操作:
- 列出容器 (REST API)