列出带有 TypeScript 的 Blob 容器

通过代码列出 Azure 存储帐户中的容器时,可以指定多个选项来管理如何从 Azure 存储返回结果。 本文介绍如何使用适用于 JavaScript 的 Azure 存储客户端库列出容器。

先决条件

  • 本文中的示例假设你已经设置了一个项目来使用适用于 JavaScript 的 Azure Blob 存储客户端库。 若要了解如何设置项目(包括安装包、导入模块,以及创建授权客户端对象来使用数据资源),请参阅开始使用 Azure Blob 存储和 TypeScript
  • 授权机制必须具有列出 blob 容器的权限。 要了解详细信息,请参阅以下 REST API 操作的授权指南:

关于容器列出选项

若要列出存储帐户中的容器,请创建 BlobServiceClient 对象,然后调用以下方法:

列出具有可选前缀的容器

默认情况下,列出操作每次最多返回 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 操作:

代码示例

客户端库资源

另请参阅