前回Azure StorageのBlob Storageにコンテイナーを作成し、ファイルをアップロードする方法を公開しました。今回は実際にユーザーのフォームからファイルをアップロードするフローをカバーします。
前回の記事はこちら
https://qiita.com/syantien/items/ee8c88c649d5b0617ccd
フォーム (フロント、Razor)
@using (Html.BeginForm("UploadFiles", "Blob", FormMethod.Post, new { @enctype = "multipart/form-data" }))
{
@Html.Hidden("container", ViewData["Container"])
@Html.TextBox("files", "", new { @type = "file", @multiple = "mulitiple" })
<button type="submit" class="btn btn-primary rounded-0">Upload</button>
}
コントローラー (処理)
[HttpPost]
public async Task<IActionResult> UploadFiles(List<IFormFile> files, string container)
{
var result = await _blobHandlers.UploadFilesAsync(files, container);
return RedirectToAction("Container", new { @id = container });
}
上記にある_blobHandlers.UploadFilesAsync
は下記のとおりです
/// <summary>
/// Upload files
/// </summary>
/// <param name="FileToUpload"></param>
/// <param name="container"></param>
/// <returns></returns>
/// <summary>
/// Upload files
/// </summary>
/// <param name="FileToUpload"></param>
/// <param name="container"></param>
/// <returns></returns>
public async Task<List<string>> UploadFilesAsync(List<IFormFile> FileToUpload, string container)
{
var AbsoluteUris = new List<string>();
// Get azure table storage connection string.
string ConnectionString = _config.Value.AzureBlobSettings.connection;
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConnectionString);
CloudBlobClient cloudBlobClient = storageAccount.CreateCloudBlobClient();
var blobContainer = cloudBlobClient.GetContainerReference(container);
// If container does not exist
if (!blobContainer.Exists())
{
await blobContainer.CreateAsync();
// Set the permissions so the blobs are public.
BlobContainerPermissions permissions = new BlobContainerPermissions
{
PublicAccess = BlobContainerPublicAccessType.Blob
};
await blobContainer.SetPermissionsAsync(permissions);
}
foreach (var formFile in FileToUpload)
{
if (formFile.Length > 0)
{
try
{
string FileName = Path.GetFileName(formFile.FileName);
CloudBlockBlob blockBlob;
// Create a block blob
blockBlob = blobContainer.GetBlockBlobReference(FileName);
// Set the object's content type
blockBlob.Properties.ContentType = formFile.ContentType;
// upload to blob
blockBlob.UploadFromStream(formFile.OpenReadStream());
// get file uri
AbsoluteUris.Add(blockBlob.Uri.AbsoluteUri);
}
catch (Exception ExceptionObj)
{
throw ExceptionObj;
}
}
}
return AbsoluteUris;
}
終わり
今回は以上です