練習 - 取得 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
}
您可以使用 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());
}
IndexBean
和 index.xhmtl
會處理此方法傳回的名稱,並將之轉譯為頁面上的超連結。