LoginSignup
0
0

More than 3 years have passed since last update.

[Storage] ファイルをアップロードするフォーム

Posted at

前回Azure StorageのBlob Storageにコンテイナーを作成し、ファイルをアップロードする方法を公開しました。今回は実際にユーザーのフォームからファイルをアップロードするフローをカバーします。

前回の記事はこちら:point_down_tone2:
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;
}

終わり

今回は以上です

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0