【C#】Azure Blob Storage にファイルをアップロード/ダウンロード

C#でAzure Storageに接続し、ファイルをアップロード/ダウンロード する方法をまとめます

利用準備

ストレージアカウントの作成

まずはストレージアカウントを作成します(作成手順は割愛します)

コンテナの作成

作成したストレージアカウントのコンテナ管理画面に移動します

新しいコンテナを作成します(後述するC#のコードから作成することも可能です)

接続文字列の取得

C#のコードから接続する際に使用する接続文字列を取得します

ストレージアカウントのアクセスキー管理画面に移動します

上部にある、キーの表示を押すと接続文字列を表示できます

こちらをコピペして控えておきます

以上でAzure側の準備は完了です

C#でAzure Storage を操作

C#でAzure Storage を操作するには、ライブラリを使用します

dotnet add package Azure.Storage.Blobs

Azure Storage にアップロード

ローカルファイルをアップロード

ローカル端末のファイルをアップロードする方法です

上記で作成したコンテナ名と、取得したストレージアカウントの接続文字列を使用します

using Azure.Storage.Blobs;

string azureConnectionString = "【接続文字列】";
string containerName = "【コンテナ名】";
BlobContainerClient container = new(azureConnectionString, containerName);

// アップロードするファイルパス
string localFilePath = @"E:Testtest.csv";
string fileName = Path.GetFileName(localFilePath);
BlobClient blobClient = container.GetBlobClient(fileName);
// アップロード
await blobClient.UploadAsync(localFilePath, true);

上記を実行すると、コンテナ内にファイルが作成されたことが確認できました

ストリームをアップロード

インターネットからmp4ファイルを取得し、ストリームをアップロードしてみます

// アップロードするファイルパス
HttpClient client = new();  // 本当はこの使い方はよくない...
Stream stream = await client.GetStreamAsync("https://www.home-movie.biz/mov/hts-samp001.mp4");
// 保存するファイル名
string fileName = "testVideo.mp4";
BlobClient blobClient = container.GetBlobClient(fileName);
// アップロード
await blobClient.UploadAsync(stream, true);

Azure Storage からダウンロード

ファイルパスを使用してダウンロード

using Azure.Storage.Blobs;

string azureConnectionString = "【接続文字列】";
string containerName = "【コンテナ名】";
BlobContainerClient container = new(azureConnectionString, containerName);

// AzureStorage上のファイル名
string azureFileName = "testVideo.mp4";
BlobClient blobClient = container.GetBlobClient(azureFileName);
// ローカルに保存するファイルパス
string saveFilePath = @"E:TestDownload.mp4";
// ダウンロード
await blobClient.DownloadToAsync(saveFilePath);

ローカルに保存されたことが確認できました

ストリームからダウンロード

using (var stream = await blobClient.OpenReadAsync())
{
    using (FileStream fs = File.OpenWrite(saveFilePath))
    {
        await stream.CopyToAsync(fs);
    }
}

ストリームへのダウンロード

using (FileStream fs = File.OpenWrite(saveFilePath))
{
    await blobClient.DownloadToAsync(fs);
}

その他の設定

アクセスレベルの変更

既定の状態ではコンテナ内のファイルのURLに接続してもファイルをダウンロードすることができません

パブリックに公開したい場合は、アクセスレベルを変更するという方法があります

対象のコンテナ管理画面から、アクセスレベルを変更します から変更

このようにすることで、匿名ユーザからのアクセスを許容できます

https://docs.microsoft.com/ja-jp/azure/storage/blobs/anonymous-read-access-configure?tabs=portal

Leave a Reply

Your email address will not be published. Required fields are marked *