练习 - 获取 blob 引用

已完成

若要与 Blob 存储中的容器交互,请使用 BlobContainerClient 对象。 除了创建在上个单位中看到的容器,还可使用 BlobContainerClient 对象来列出容器中的 blob。

列出容器中的 Blob

使用 BlobContainerClientGetBlobsAsync 方法获取容器中的 blob 列表。 在后台,客户端会对 Azure 进行一次或多次 HTTP 调用以列出容器中的所有 Blob。 由于此方法是异步的,因此在读取结果时需要 await 结果。 它们在单个 HTTP 调用中可能不会全都返回。 以下代码显示了使用 foreach 循环读取结果的标准模式。

AsyncPageable<BlobItem> blobs = containerClient.GetBlobsAsync();

await foreach (var blob in blobs)
{
    // Read the BlobItem and work with it here
}

可以使用 BlobContainerClient 中的 listBlobs 方法在容器中获取 blob 列表。 在后台,客户端会对 Azure 进行一次或多次 HTTP 调用以列出容器中的所有 Blob。 此方法返回实现 Iterable<BlobItem>PagedIterable<BlobItem>。 然后可以一次读取一个项,也可以按页读取。 以下代码显示了使用 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());

练习

在应用中,其中一个功能需要从 API 获取 blob 列表。 使用如上所示的模式列出容器中的所有 blob。 处理列表时,获取每个 blob 的名称。

使用编辑器,将 BlobStorage.cs 中的 GetNames 替换为以下代码并保存更改

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 处理此方法返回的名称,以将名称转换为 URL。 将名称返回到客户端时,它们将在页面上呈现为超链接。

使用编辑器,将 BlobStorage.java 中的 listNames 替换为以下代码并保存更改。

public List<String> listNames() {
    return blobContainerClient.listBlobs()
      .stream()
      .map(BlobItem::getName)
      .collect(Collectors.toList());
}

IndexBeanindex.xhmtl 处理此方法返回的名称,使其在页面上呈现为超链接。