Azure

【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:\Test\test.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:\Test\Download.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

エンジニアの転職ならこれ!

【第二新卒向け】マイナビジョブ20's

マイナビジョブ20'sは、20代・第二新卒・既卒向けの転職エージェントです。

▼こんな方におすすめ
・はじめて転職しようと思っている
・転職できるだけのスキルが自分にあるか不安
・手厚いサポートを受けたい

【フリーランス向け】 Midworks

Midworksは豊富な案件と「フリーランス」と「正社員」の良いとこ取りをした働き方を実現する手厚い保障が特徴です。

▼こんな方におすすめ
・現在正社員でフリーランスになろうか悩んでいる
・フリーランスとして働いているが、先行きが不安がある  (安定的な案件確保や保障など)
・自分の市場価値を知りたい、見合った案件で参画したい
・今後のキャリアビジョンを踏まえて案件を選びたい