- はじめに
前回、Azure Blobストレージを操作する.NET Core Webプロジェクトでコードを使用した。続いて、この記事ではAzure.Storageのクラスとメソッドについて詳しく見ていきます。
Azure Blob Storageストレージシリーズ:
1,Azure Storage シリーズ(1)導入紹介
2,Azure Storage シリーズ(2).NET Core WebプロジェクトでBlobストレージを操作する
3,Azure Storage シリーズ(3)Blobパラメータ設定の説明
4,Azure Storage シリーズ(4).NetでTable Storageを使用する
5,Azure Storage シリーズ(5)Azure.Cosmos.TableライブラリでTable Storageを使用する
6,Azure Storage シリーズ(6)Azure Queue Storageを使用する
- 本論
1. Blob接続文字列の構成
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"AzureBlobStorageConnectionString": "DefaultEndpointsProtocol=https;AccountName=cnbateblogaccount;AccountKey=FU01h022mn1JjONp+ta0DAXOO7ThK3diY891n9nycsTLGZF83nJpGVCVFhGOfV0wndOOQ==;EndpointSuffix=core.windows.net"
}
「AzureBlobStorageConnectionString」は、アプリケーションがAzureストレージアカウントに対して要求を行う際に、アクセスキーによって認証されます。アクセスキーは安全な方法(例えばAzure Key Vaultを使用)で保存し、共有してはなりません。定期的にアクセスキーを再生成することを推奨します。
Azureは2つのアクセスキーを提供しており、一方を再生成してももう一方で接続を維持できます。
2. BlobServiceClientとBlobServiceの登録
BlobServiceClient
services.AddSingleton(x => new BlobServiceClient(Configuration.GetValue<string>("AzureBlobStorageConnectionString")));
ブロブサービスを作成し、appsettingsのキー「AzureBlobStorageConnection」の値をコンストラクタに渡します。
BlobService
services.AddSingleton<IBlobSergvice, BlobService>();
3. BlobServiceのメソッド
3.1 ブロブ情報を取得する
#region 01, ブロブを取得する、名前で+async Task<BlobInfo> GetBlobAsync(string name)
/// <summary>
/// 名前でブロブを取得する
/// </summary>
/// <param name="name">ブロブの名前</param>
/// <returns></returns>
public async Task<Azure.Storage.Models.BlobInfo> GetBlobAsync(string name)
{
var containerClient = _blobServiceClient.GetBlobContainerClient("picturecontainer");
var blobClient = containerClient.GetBlobClient(name);
var blobDownLoadInfo = await blobClient.DownloadAsync();
return new Azure.Storage.Models.BlobInfo(blobDownLoadInfo.Value.Content, blobDownLoadInfo.Value.ContentType);
}
#endregion
ブロブストレージ情報の具体的な実装方法です。
- 「picturecontainer」という名前でContainerClientを取得し、必要なブロブ名でBlobClientを取得します。
- 非同期メソッド「DownloadAsync」を使用してブロブオブジェクトをダウンロードし、その中のメタデータや属性などの情報を取得します。
- 最後に、BlobInfoオブジェクトを返却し、コンストラクタにContentとContentTypeを渡します。
3.2 ブロブ情報を取得する
#region 02, すべてのブロブ名を取得する+async Task<IEnumerable<string>> ListBlobsNameAsync()
/// <summary>
/// すべてのブロブ名を取得する
/// </summary>
/// <returns></returns>
public async Task<IEnumerable<string>> ListBlobsNameAsync()
{
var containerClient = _blobServiceClient.GetBlobContainerClient("picturecontainer");
var items = new List<string>();
await foreach (var blobItem in containerClient.GetBlobsAsync())
{
items.Add(blobItem.Name);
}
return items;
}
#endregion
ブロブストレージ情報の具体的な実装方法です。
- 「picturecontainer」という名前でContainerClientを取得し、必要なブロブ名でBlobClientを取得します。
- 非同期foreachでContainerClientのGetBlobsAsyncメソッドを呼び出します。このメソッドには複数のデフォルトパラメータがあります。
- BlobTraits(ブロブ特性):すべての特性を持つブロブを取得する
- BlobStates(ブロブ状態):すべての状態を持つブロブを含むフラグ
- prefix(接頭辞):結果をフィルターし、指定された接頭辞で始まるブロブのみを返す文字列
- cancellationToken:操作をキャンセルする通知を伝播する
- 各ブロブの名前をリストに追加します。
3.3 ファイルパスとファイル名に基づいてファイルをアップロードする
#region 03, ファイルをアップロードする、ファイルパスとファイル名に基づく+async Task UploadFileBlobAsync(string filePath, string filename)
/// <summary>
/// ファイルをアップロードする、ファイルパスとファイル名に基づく
/// </summary>
/// <param name="filePath">ファイルパス</param>
/// <param name="filename">ファイル名</param>
/// <returns></returns>
public async Task UploadFileBlobAsync(string filePath, string filename)
{
var containerClient = _blobServiceClient.GetBlobContainerClient("picturecontainer");
var blobClient = containerClient.GetBlobClient(filename);
await blobClient.UploadAsync(filePath, new BlobHttpHeaders { ContentType = filePath.GetContentType() });
}
#endregion
ブロブデータの具体的な実装方法です。
- 「picturecontainer」という名前でContainerClientを取得し、必要なブロブ名でBlobClientを取得します。
- 非同期でファイルをアップロードし、ファイルパスを指定し、BlobHttpHeadersでコンテンツタイプを指定します。
3.4 ファイルのストリームをアップロードする
#region 04, ファイルのストリームをアップロードする、ファイル内容とファイル名に基づく+async Task UploadContentBlobAsync(string content, string filename)
/// <summary>
/// ファイルのストリームをアップロードする、ファイル内容とファイル名に基づく
/// </summary>
/// <param name="content">ファイル内容</param>
/// <param name="filename">ファイル名</param>
/// <returns></returns>
public async Task UploadContentBlobAsync(string content, string filename)
{
var containerClient = _blobServiceClient.GetBlobContainerClient("picturecontainer");
var blobClient = containerClient.GetBlobClient(filename);
var bytes = Encoding.UTF8.GetBytes(content);
await using var memoryStream = new MemoryStream(bytes);
await blobClient.UploadAsync(memoryStream, new BlobHttpHeaders() { ContentType = filename.GetContentType() });
}
#endregion
ブロブデータの具体的な実装方法です。
- 「picturecontainer」という名前でContainerClientを取得し、必要なブロブ名でBlobClientを取得します。
- アップロードする文字列をバイトストリームに変換します。
- 非同期でバイトストリームをアップロードし、BlobHttpHeadersでコンテンツタイプを指定します。
3.5 ブロブデータを削除する
#region 05, ブロブを削除する+async Task DeleteBlobAsync(string blobName)
/// <summary>
/// ブロブを削除する
/// </summary>
/// <param name="blobName">ブロブ名</param>
/// <returns></returns>
public async Task DeleteBlobAsync(string blobName)
{
var containerClient = _blobServiceClient.GetBlobContainerClient("picturecontainer");
var blobClient = containerClient.GetBlobClient(blobName);
await blobClient.DeleteIfExistsAsync();
}
#endregion
ブロブ削除の具体的な実装方法です。
- 「picturecontainer」という名前でContainerClientを取得し、必要なブロブ名でBlobClientを取得します。
- 非同期メソッド「DeleteIfExistsAsync」を呼び出してブロブを削除します。
以上で、ブロブの作成、削除、検索に関する方法は終了しました。
- 結論
今日は内容が少なく、前回のブロブ操作に関するメソッドを示しただけです。ブロブ操作について説明しました。皆さんはマイクロソフトの公式ドキュメント:Azure Storage Blobsを参照してください。次回からは、ストレージの新しい内容であるAzure Table Storageについて紹介します。
github:https://github.com/yunqian44/Azure.Storage.git
著者:Allen
著作権:本文の明確な場所に著者と出典を記載してください。誤りを見つけた場合は、ご指摘をお願いします。