演習 - BLOB 参照を取得する
Blob Storage のコンテナーを操作するには、BlobContainerClient
オブジェクトを使います。 前のユニットで見たコンテナーの作成に加えて、BlobContainerClient
オブジェクトを使うと、コンテナー内の BLOB の一覧を表示することもできます。
コンテナー内の BLOB を列挙する
BlobContainerClient
の GetBlobsAsync
メソッドを使用すると、コンテナーの BLOB の一覧を入手できます。 バックグラウンドでクライアントが Azure に 1 回以上の HTTP 呼び出しを実施し、コンテナー内のすべての BLOB の一覧を取得します。 このメソッドは非同期であるため、結果を読み取る際に await
を実行する必要があります。 これらはすべて 1 つの 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 に 1 回以上の HTTP 呼び出しを実施し、コンテナー内のすべての BLOB の一覧を取得します。 このメソッドからは、Iterable<BlobItem>
を実装する PagedIterable<BlobItem>
が返されます。 その後、一度に 1 項目ずつ、または項目のページ単位で読み取ることができます。 次のコードは 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());
演習
アプリケーションの機能の 1 つに、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
はこのメソッドが返す名前を処理し、ページ上にハイパーリンクとして表示します。