ASP.NET MVC ファイルアップロード

ファイルアップロード内容
  1. Views/Move/Upload.cshtmlでファイルを選択する
  2. アップロードボタンをクリックするとダウンロード画面へ遷移する
作成物
  1. Views/Move/Upload.cshtmlを修正して、アップロード用のフォームを作成
  2. Controllers/UploadControllers.csを作成して、フォームからファイルを受け取ってセッションに格納
  3. Views/Upload/Download.cshtmlを作成して、画面遷移する

コード

Views/Move/Upload.cshtml(修正)

@*
    For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860
*@
@{
}

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>upload</title>
</head>
<body>
    @* 追加 開始*@
    @using (Html.BeginForm("Download","Upload", FormMethod.Post, new { enctype = "multipart/form-data" }))
    {
        <input type="file" name="uploadedFile" />
        <input type="submit" value="アップロード" />
    }
    @* 追加 終了*@
</body>
</html>
Controllers/UploadControllers.cs(新規)

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Http;
using System.IO;

namespace FileUploadDownload.Controllers
{
    public class UploadController : Controller
    {
        public IActionResult Download(IFormFile uploadedFile)
        {
            if (uploadedFile == null) return View();

            string fileName = uploadedFile.FileName;
            using (var uploadedStream = uploadedFile.OpenReadStream())
            using (var sessionStream = new MemoryStream())
            {
                uploadedStream.CopyTo(sessionStream);
                HttpContext.Session.SetString("fileName", fileName);
                HttpContext.Session.Set("uploadedStream", sessionStream.ToArray());
            }
            return View();
        }
    }
}
Views/Upload/Download.cshtml(新規)

@*
    For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860
*@
@{
}

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>ダウンロード</title>
</head>
<body>
    hello
</body>
</html>