2013-02-27 11 views
10

Desidero fornire una funzione sul modulo per consentire all'utente di caricare file e salvare nel database. Come è fatto in ASP.NET MVC.Caricamento di file nel database con ASP.NET MVC

Cosa DataType scrivere nella mia classe modello. Ho provato con Byte[], ma durante la scaffolding la soluzione non è stata in grado di generare l'HTML appropriato per la vista corrispondente.

Come vengono gestiti questi casi?

risposta

31

È possibile utilizzare uno byte[] sul modello e uno HttpPostedFileBase sul modello di visualizzazione. Per esempio:

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

e poi:

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"); 
    } 
} 

e, infine, a suo avviso:

@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

Salve, questo è impressionante, ma come un niubbo assoluto, dove sarebbe il posto migliore per memorizzare i file, se per esempio, sto solo permettendo all'amministratore del sito di caricare file (file .exe dell'applicazione) che gli utenti possono scaricare? – MoonKnight

Problemi correlati