Asp.net mvc dosya yükleme (file upload)

13 Ocak 2016 4 dk okuma süresi 303 okunma

Mvc'de birçok kişi dosya yükleme kısmında sorun yaşıyor. Bunu aşmak için 2 kolay yöntem var. Birisi klasik fileupload ile Request.Files diğeri ise System.Web.HttpPostedFileBase. Aşağıdaki örneklerde ikisini de görebilirsiniz. Burada en önemli nokta form üzerinde enctype özelliğinin olması.


Klasik Request.Files yöntemi ile dosya yükleme

@using (Html.BeginForm("Upload", "FileUpload", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    <input type="file" name="uploadingFiles" />
    <input type="submit" value="Upload file" />
}


Controller tarafında ise şu şekilde karşılıyoruz. Herhangi bir attribute kullanmamıza gerek yok. Çünkü Request ile işlem yapacağız.

public ActionResult Upload()
{
    if (Request.Files.Count > 0)
    {
        var file = Request.Files[0];
        if (file != null && file.ContentLength > 0)
        {
            // burada dilerseniz dosya tipine gore filtreleme yaparak sadece istediginiz dosya formatindaki dosyalari yukleyebilirsiniz
            //if (file.ContentType == "image/jpeg" || file.ContentType == "image/jpg" || file.ContentType == "image/png" || file.ContentType == "image/gif")
            //{
                var fi = new FileInfo(file.FileName);
                var fileName = Path.GetFileName(file.FileName);
                fileName = Guid.NewGuid().ToString() + fi.Extension;
                var path = Path.Combine(Server.MapPath("~/files/"), fileName);
                file.SaveAs(path);
            //}
        }
    }

    return View();
}


System.Web.HttpPostedFileBase yöntemi ile dosya yükleme

View yine yukarıdaki ile aynısı. Dikkat ederseniz file input'unda name kısmı boş değil. Burasını zaten hiçbir zaman boş bırakmamanızı tavsiye ediyorum. Controller tarafında bu name üzerinden erişim sağlıyoruz.

[HttpPost]
public ActionResult Upload(System.Web.HttpPostedFileBase uploadingFiles)
{
    if (file != null && file.ContentLength > 0) 
    {
        // yukleme islemleri
    }
    
    return View();
}


Birden fazla dosya yükleme (mvc multiple file upload)

File input'a multiple özelliğini ekliyoruz ve controller kısmında bu sefer tek HttpPostedFileBase yerine IEnumerable<HttpPostedFileBase> olmalı.

@using (Html.BeginForm("Upload", "FileUpload", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    <input type="file" name="uploadingFiles" multiple />
    <input type="submit" value="Upload file" />
}
[HttpPost]
public ActionResult Upload(IEnumerable<HttpPostedFileBase> uploadingFiles)
{
    foreach (var file in files)
    {
        if (file != null && file.ContentLength > 0)
        {
            // dosya yukleme islemleri
        }
    }
    
    return View();
}
Yazılarıma abone olmak ister misiniz?
Spam yapılmaz, sadece bildirim amaçlıdır. İstediğiniz zaman abonelikten çıkabilirsiniz.
İlginizi çekebilecek diğer yazılar.
Form post ile giden tüm dataları loglama

Asp.net Core ile farklı bir class library'den appsettings json dosyasını kolayca okumak

Hatalı bundle kullanımından dolayı alınan MIME type hatası ve çözümü