練習 - 取得 Blob 參考
若要與 Blob 儲存體中的容器互動,請使用 BlobContainerClient 物件。 除了建立您在最後一個單元中看到的容器之外,BlobContainerClient 物件也可用來列出容器中的 Blob。
備註
此練習為選擇性項目。 如果您想要完成此練習,您必須先建立 Azure 訂用帳戶,才能開始。 如果您沒有 Azure 帳戶,或目前不想建立帳戶,您可以閱讀指示,以便瞭解所呈現的資訊。
列出容器中的 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。 此方法會傳回實作 PagedIterable<BlobItem> 的 Iterable<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 的名稱。
使用編輯器,以下列程式碼取代 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。 當名稱傳回給用戶端時,會轉譯為頁面上的超連結。
使用編輯器,以下列程式碼取代 listNames 中的 BlobStorage.java,並儲存您的變更。
public List<String> listNames() {
return blobContainerClient.listBlobs()
.stream()
.map(BlobItem::getName)
.collect(Collectors.toList());
}
IndexBean 和 index.xhmtl 會處理此方法傳回的名稱,並將之轉譯為頁面上的超連結。