ROMANCE DAWN for the new world

Microsoft Azure を中心とした技術情報を書いています。

ASP.NET Core アプリケーションで Azure Blob Storage SDK v12 を使用する

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

www.nuget.org

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