练习 - 获取 blob 引用
若要与 Blob 存储中的容器交互,请使用 BlobContainerClient
对象。 除了创建在上个单位中看到的容器,还可使用 BlobContainerClient
对象来列出容器中的 blob。
列出容器中的 Blob
使用 BlobContainerClient
的 GetBlobsAsync
方法获取容器中的 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());
}
IndexBean
和 index.xhmtl
处理此方法返回的名称,使其在页面上呈现为超链接。