Yeni bir boş Core projesi oluşturalım. İsmini DosyaYukleme olarak belirleyelim.
Temel ayarların yapıldığı program.cs dosyasını düzenleyelim.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddMvc();
var app = builder.Build();
app.UseDefaultFiles();
app.UseStaticFiles();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}"
);
app.Run();
Projeyi çalıştıralım. Controller bulunamadığı için hata verecektir. Öncelikle MVC projesi için gerekli olan klasörleri oluşturalım. Projemizi çalıştıralım. Controllers panelinde dosya olmadığı için hata verecektir.
Şimdi Controllers klasörü içine HomeController dosyasını oluşturalım. Aşağıdaki gibi bir action metodu oluşturulacaktır. Bu metod Index() isimli view dosyasını döndürecektir.
public IActionResult Index()
{
return View();
}
Break point atalım. Projeyi çalıştıralım. Index() isimli metod çalıştırılacak ancak bu dosya Views klasöründe olmadığı için hata verecektir. Şimdi Views klasörü altında Home klasörünü, bunun altında Index dosyasını oluşturalım. Bu işlemi gerçekleştirmek için şu yolu takip edelim. HomeController sayfasında Index() metodunun içindeyken farenin sağ tuşuna basalım. Ekrana gelen içerik menüsünden Add View komutunu çalıştıralım. Çıkan form sayfasında Razor View seçeneğini seçelim ve Add butonuna basalım. Gelen ekranda Use a layout page onay kutusunu kaldıralım. Add diyerek işlemi tamamlayalım. Bu yöntemi kullanarak Views klasöründe hem Home isminde bir klasör oluşturacağız hem de view sayfası html kodlarının tamamını gösterir şekilde ekrana gelecektir.
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Öğrenci Listesi</title>
</head>
<body>
</body>
</html>
Projeyi çalıştıralım. Proje hatasız bir şekilde çalıştırılır. Projede bootstrap ve jquery kütüphanelerini yüklemek için wwwroot klasörünü ekleyelim. Projeye bootstrap eklemek için proje isminin üzerinde farenin sağ tuşuna basalım. Ekrana gelen içerik menüsünden Add diyelim. Burada yer alan komutlardan Client-Side Library komutunu çalıştıralım. Ekrana gelen form sayfasında library kutusuna bootstrap yazalım. Install diyerek kurulum işlemini tamamlayalım. Aynı komutu kullanarak projeye jquery kütüphanesini de ekleyelim. Index view dosyasına bootstrap ve jquery kütüphanelerini dahil edelim.
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Öğrenci Listesi</title>
<link href="~/lib/bootstrap/css/bootstrap.min.css"
rel="stylesheet" />
<script src="~/lib/jquery/jquery.min.js"></script>
<script src="~/lib/bootstrap/js/bootstrap.min.js">
</script>
</head>
<body>
</body>
</html>
Projeyi çalıştıralım. Kütüphanelerin projeye hatasız bir şekilde eklendiğinden emin olalım. Öncelikle öğrencilere ait gerekli bilgilerin tutulacağı Models tasarımını yapalım. Amacımız oluşturduğumuz modele ait tüm özellikleri hem view hem de controller tarafında kullanabilmek. Şimdi Models klasörü altına Ogrenci isminde bir class oluşturalım. Dosyanın içeriği aşağıdaki gibi olacaktır.
public class Ogrenci
{
public int okulNo { get; set; }
public string? ogrAdi { get; set; }
public string? ogrSoyadi { get; set; }
public string? Sinif { get; set; }
}
Şimdi bu değerleri get metoduyla alacağımız view dosyasını düzenleyelim.
<div class="container mt-3">
<form method="POST" action="/Home/Index"
enctype="multipart/form-data">
<div class="form-group">
<label>Okul No</label>
<input type="text" name="OkulNo" class="form-control" />
</div>
<div class="form-group">
<label>Ad</label>
<input type="text" name="OgrenciAdi" class="form-control" />
</div>
<div class="form-group">
<label>Soyad</label>
<input type="text” name="OgrenciSoyadi" class="form-control" />
</div>
<div class="form-group">
<label>Sınıf</label>
<input type="text" name="Sinifi" class="form-control" />
</div>
<div class="form-group">
<label>Öğrenci Resmi</label>
<input type="file" name="Resim" class="form-control" />
</div>
<div class="form-group">
<button type="submit" class="btn btn-primary">
Gönder
</button>
</div>
</form>
</div>
Projeyi çalıştırdığımızda öğrencilerden gerekli bilgilerin alınacağı form ekrana gelir. Verilerin controller tarafında alınacağı action metodu tanımlayalım.
[HttpPost]
public IActionResult Index(Ogrenci ogrenci, IFormFile Resim)
{
if (Resim == null || Resim.Length == 0)
return Content("Resim yüklenemedi.");
var yol = Path.Combine(Directory.GetCurrentDirectory(),
"wwwroot", Resim.FileName);
Resim.CopyTo(new FileStream(yol, FileMode.Create));
return Content("Dosya yükleme tamamlandı.");
}
Projeyi çalıştırdığımızda form sayfasında gerekli bilgileri girelim, uygun bir resim ekleyelim ve Gönder butonuna bastığımızda resmin wwwroot klasörünün altına yüklendiğini görürsünüz.
Formda gönderilen verileri ve dosyayı sunucu tarafından almanın diğer bir yolu model sınıfında IFormFile özelliğini kullanmaktır. Aşağıdaki kodları Ogrenci model sınıfı içerisine yazınız.
public class Ogrenci
{
public int okulNo { get; set; }
public string? ogrAdi { get; set; }
public string? ogrSoyadi { get; set; }
public string? Sinif { get; set; }
public IFormFile Resim { get; set; }
}
Home Controller dosyasına aşağıdaki komutları yazınız.
[HttpPost]
public IActionResult Index(Ogrenci ogrenci)
{
if (ogrenci.Resim == null || ogrenci.Resim.Length == 0)
return Content("Dosya yüklenemedi.");
var yol = Path.Combine(Directory.GetCurrentDirectory(),
"wwwroot", ogrenci.Resim.FileName);
ogrenci.Resim.CopyTo(new FileStream(yol, FileMode.Create));
return Content("Dosya yükleme tamamlandı.");
}
Projeyi kaydedip çalışıralım. Resmin yüklendiğini görürsünüz.