ASP.NET Core MVCでAzure StorageのBlobに画像をアップロードする

 Azure Storageを使うことにしたのでそこにファイル(個人的に画像を用途に考えている)をアップロードする方法。コードメモ。準備フェーズは簡単にできたので詳しいメモは残さない。

 まずAzure Storageを用意。Storage内にコンテナを一つ用意。アクセス用のアカウント名とキーをメモしておく。

 C#(.NET Core)からAzureを使う準備。Nugetコンソールで下記。
Install-Package WindowsAzure.Storage
公式のサンプルを適当に探して読んでたらもう一つパッケージを入れていたが、それはこれを書いている時点で.NET Core対応をしていないものなので入れちゃいかん。

 準備ができたのでコード。ブラウザのフォームから画像を受け取ってそれをAzure Storageに入れるという流れ。
 まずHTMLは下記のような具合に。
<form action="Images" method="POST" enctype="multipart/form-data">

<input type="file" name="images" multiple>
<button>send</button>
</form>


 ブラウザからのPOSTを受け取ってAzure Storageに入れるC#コード。
[HttpPost]

public async Task<string> SaveImagesAsync()
{
var accontName = "xxxxx";
var key = "xxxx";
var account = new CloudStorageAccount(
new Microsoft.WindowsAzure.Storage.Auth.StorageCredentials(
accontName,
key),
true);
var blobClient = account.CreateCloudBlobClient();
var blobContainer = blobClient.GetContainerReference("blog");

foreach (var file in Request.Form.Files)
{
var name = System.IO.Path.GetFileName(file.FileName);

using (var s = file.OpenReadStream())
{
var blockBlob = blobContainer.GetBlockBlobReference(name);
await blockBlob.UploadFromStreamAsync(s);
}

}
return "ok";
}
comment: 0