2013-02-27 12 views
10

Kullanıcıların dosya yükleme ve Veritabanına kaydetmesi için formumda bir özellik vermek istiyorum. Bu, ASP.NET MVC'de nasıl yapılır.Dosyaları ASP.NET MVC ile Veritabanına Karşıya Yükleme

Model Modelimde yazmak için hangi DataType yazılır. Byte[] ile denedim, ancak iskele sırasında çözüm, ilgili Görünümde uygun HTML üretemedi.

Bu durumlar nasıl ele alınır?

cevap

31

Modelinize bir byte[] ve görünüm modelinizde bir HttpPostedFileBase kullanabilirsiniz. Sonra

public class MyViewModel 
{ 
    [Required] 
    public HttpPostedFileBase File { get; set; } 
} 

ve: Örneğin:

public class HomeController: Controller 
{ 
    public ActionResult Index() 
    { 
     var model = new MyViewModel(); 
     return View(model); 
    } 

    [HttpPost] 
    public ActionResult Index(MyViewModel model) 
    { 
     if (!ModelState.IsValid) 
     { 
      return View(model); 
     } 

     byte[] uploadedFile = new byte[model.File.InputStream.Length]; 
     model.File.InputStream.Read(uploadedFile, 0, uploadedFile.Length); 

     // now you could pass the byte array to your model and store wherever 
     // you intended to store it 

     return Content("Thanks for uploading the file"); 
    } 
} 

ve nihayet görünümünde:

@model MyViewModel 
@using (Html.BeginForm(null, null, FormMethod.Post, new { enctype = "multipart/form-data" })) 
{ 
    <div> 
     @Html.LabelFor(x => x.File) 
     @Html.TextBoxFor(x => x.File, new { type = "file" }) 
     @Html.ValidationMessageFor(x => x.File) 
    </div> 

    <button type="submit">Upload</button> 
} 
+0

Hi, bu harika, ancak mutlak çaylak olarak, burada iyi bir yer olurdu dosyaları saklamak için, örneğin, yalnızca site yöneticisinin kullanıcıların yükleyebileceği dosyaları (uygulama .exe dosyası) yüklemesine izin vermek istiyorum. – MoonKnight