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>