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