Asp.net Core MVC Image Upload

Core Mvc ile basit dosya yükleme işlemi nasıl yapılır

/Controllers/BlogController.cs / [HttpGet] ve [HttpPost] olarak Edit Actionlar aşağıdaki gibidir.

  [HttpGet]
        public IActionResult Edit(int id)
        {
            //kategorileri gönderiyorum
            ViewBag.Categories = new SelectList(categoryRepository.GetAll(), "CategoryID", "Name");

            if (id != null)
            {
                //Yukarıda id NblogRepository.GetById((int)id)ull olabilir olarak işaretlendiği için return View de (int) parse ediyoruz.
                var blog = blogRepository.GetById((int)id);
                return View(blog);
            }

            return RedirectToAction("Index", "Home");

        }

        [HttpPost]
        //IFormFile ile tek dosya yüklemesi yapıyoru. Çoklu dosya yüklemesinde IEnumerable<IFormFile> file kullanılır.
        //IFromFile asenkron olduğu için async tanımlanır ve IActionResult Task<IActionResult> çevrilir.
        public async Task<IActionResult> Edit(Blog entity, IFormFile file)
        {
            //Kayıt işlemi yapılacak
            if (ModelState.IsValid)
            {
                //Path oluşturup Path.Combine(Directory.GetCurrentDirectory() ile kök dizini, 
                //"wwwroot\\img" ile kayıt yapılacak klasoru,
                //file.filename ile de dosyayı veriyoruz.
                if (file!=null)
                {
                    if (file.ContentType == "image/jpeg" || file.ContentType == "image/jpg" || file.ContentType == "image/png")
                    {
                        var path = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot\\img", file.FileName);

                        // using Kullanmak demek.
                        //var stream =new FileStream oluşuturup path ve filemode.create diyoruz.
                        using (var stream = new FileStream(path, FileMode.Create))
                        {
                            await file.CopyToAsync(stream);
                        }
                        entity.image = file.FileName;
                    }                    
                }
                
                blogRepository.UpdateBlog(entity);
                if (entity.BlogID != 0)
                {
                    TempData["message"] = $"{entity.Title} güncellendi";
                }
                else
                {
                    TempData["message"] = $"{entity.Title} Kayıt Eklendi";
                }
                return RedirectToAction("Index");
            }

            ViewBag.Categories = new SelectList(categoryRepository.GetAll(), "CategoryID", "Name");
            return View(entity);
        }

 

 

Controllers/Blog/Edit.cshtml aşağıdaki gibidir

@model Blog

@section scripts{
    <script src="~/lib/ckeditor/ckeditor.js"></script>
    <script>
    CKEDITOR.replace("Body");
    </script>
}

<div class="container mt-3">
    <div class="row">
        <div class="col-md-3">
            @await Component.InvokeAsync("CategoryMenu")
        </div>
        <div class="col-md-9">
            <form asp-action="Edit" asp-controller="Blog" method="post" enctype="multipart/form-data">
                <input hidden asp-for="BlogID" />
                <div class="form-group">
                    <label asp-for="Title">Başlık</label>
                    <input class="form-control" asp-for="Title">
                </div>
                <div class="form-group">
                    <label asp-for="Description">Kısa Açıklama</label>
                    <textarea class="form-control" asp-for="Description"></textarea>
                </div>
                <div class="form-group">
                    <label asp-for="Body">Blog Metni</label>
                    <textarea class="form-control" asp-for="Body"></textarea>
                </div>
                <div class="form-group form-check">
                    <label class="form-check-label">
                        <input class="form-check-input" asp-for="isApproved" /> Yayında mı?
                    </label>
                </div>

                <div class="form-group form-check">
                    <label class="form-check-label">
                        <input class="form-check-input" asp-for="isHome" /> Ana Sayfa
                    </label>
                </div>
                <div class="form-group">
                    <label class="control-label">Görsel</label>
                    <img src="~/img/@Model.image" width="120"/>
                    <input type="file" id="file" name="file" class="form-control" />
                    <span asp-validation-for="image" class="text-danger"></span>
                </div>
                <div class="form-group">
                    <label asp-for="CategoryID" class="control-label">Kategori</label>
                    <select asp-for="CategoryID" class="form-control" asp-items="ViewBag.Categories">
                        <option disabled selected>Kategori Seçin</option>
                    </select>
                </div>
                <div class="form-group">
                    <input type="submit" value="Blog Güncelle" class="btn btn-primary" />
                </div>
            </form>
        </div>
    </div>
</div>