ASP.NET Core アプリケーションにおいて、Azure Blob Storage SDK v12 を使用する方法をまとめておきます。
公式ドキュメントに記載のある通りなので、個人的な備忘録です。
github.com
Azure Storage の接続情報管理
Azure Storage の接続情報は、Azure Key Vault および Secret Manager で管理することを前提とします。詳細は、こちらの記事を参照してください。
gooner.hateblo.jp
NuGet パッケージのインストール
現時点で最新の Azure Storage Blobs client library である v12 を使います。
Install-Package Azure.Storage.Blobs -Version 12.10.0
ASP.NET Core アプリケーションの初期化処理
BlobServiceClient
クラスのインスタンスを DI コンテナーに登録します。
public void ConfigureServices(IServiceCollection services) { // Blob Storage services.AddSingleton(new BlobServiceClient(Configuration["WebApi:StorageConnection"])); // Repository services.AddTransient<Infrastructure.IFileRepository, Infrastructure.FileRepository>(); }
FileRepository
クラスは、Blob Storage にアクセスするためのクラスとして作ることにしました。コンテナーの名前は、sample
としました。
public interface IFileRepository { Task UploadAsync(Stream fileStream, string fileName, string contentType); Task<byte[]> DownloadAsync(string fileName); Task<IList<string>> GetAsync(); } public class FileRepository : IFileRepository { private readonly BlobContainerClient _container; private const string ContainerName = "sample"; public FileRepository(BlobServiceClient blobServiceClient) { _container = blobServiceClient.GetBlobContainerClient(ContainerName); } }
Blob にファイルをアップロードする
public async Task UploadAsync(Stream fileStream, string fileName, string contentType) { var blockBlob = _container.GetBlobClient(fileName); await blockBlob.UploadAsync(fileStream, new BlobHttpHeaders { ContentType = contentType }); }
Blob からファイルをダウンロードする
public async Task<byte[]> DownloadAsync(string fileName) { var blockBlob = _container.GetBlobClient(fileName); var response = await blockBlob.DownloadContentAsync(); return response.Value.Content.ToArray(); }
Blob のリストを取得する
public async Task<IList<string>> GetAsync() { var result = new List<string>(); await foreach (var blobItem in _container.GetBlobsAsync()) { result.Add(blobItem.Name); } return result; }
ASP.NET Core Web API を経由して Blob にアクセスする
こちらの記事を参照してください。
gooner.hateblo.jp