練習 - 取得 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
}

您可以使用 listBlobs 中的 BlobContainerClient 方法來取得容器中的 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 會處理此方法傳回的名稱,並將之轉譯為頁面上的超連結。