Caricamento file razor MVC 4

Sono nuovo di MVC 4 e sto cercando di implementare il controllo del caricamento dei file nel mio sito web. Non riesco a trovare l’errore. Sto ottenendo un valore nullo nel mio file.

controller:

public class UploadController : BaseController { public ActionResult UploadDocument() { return View(); } [HttpPost] public ActionResult Upload(HttpPostedFileBase file) { if (file != null && file.ContentLength > 0) { var fileName = Path.GetFileName(file.FileName); var path = Path.Combine(Server.MapPath("~/Images/"), fileName); file.SaveAs(path); } return RedirectToAction("UploadDocument"); } } 

Vista:

 @using (Html.BeginForm("Upload", "Upload", FormMethod.Post, new { enctype = "multipart/form-data" })) {   } 

    Il parametro HttpPostedFileBase del metodo HttpPostedFileBase deve avere lo stesso nome file input del file input .

    Quindi basta cambiare l’input a questo:

      

    Inoltre, è ansible trovare i file in Request.Files :

     [HttpPost] public ActionResult Upload() { if (Request.Files.Count > 0) { var file = Request.Files[0]; if (file != null && file.ContentLength > 0) { var fileName = Path.GetFileName(file.FileName); var path = Path.Combine(Server.MapPath("~/Images/"), fileName); file.SaveAs(path); } } return RedirectToAction("UploadDocument"); } 

    Chiarire Modello:

     public class ContactUsModel { public string FirstName { get; set; } public string LastName { get; set; } public string Email { get; set; } public string Phone { get; set; } public HttpPostedFileBase attachment { get; set; } 

    Pubblica azione

     public virtual ActionResult ContactUs(ContactUsModel Model) { if (Model.attachment.HasFile()) { //save the file //Send it as an attachment Attachment messageAttachment = new Attachment(Model.attachment.InputStream, Model.attachment.FileName); } } 

    Finalmente il metodo Extension per controllare hasFile

     using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace AtlanticCMS.Web.Common { public static class ExtensionMethods { public static bool HasFile(this HttpPostedFileBase file) { return file != null && file.ContentLength > 0; } } } 

    Visualizza pagina

     @using (Html.BeginForm("ActionmethodName", "ControllerName", FormMethod.Post, new { id = "formid" })) {   } 

    file di script

     $(document).on("click", "#btnid", function (event) { event.preventDefault(); var fileOptions = { success: res, dataType: "json" } $("#formid").ajaxSubmit(fileOptions); }); 

    Nel controller

      [HttpPost] public ActionResult UploadFile(HttpPostedFileBase file) { } 

    devi solo cambiare il nome del tuo input archiviato perché lo stesso nome è richiesto nel parametro e nome del campo di input basta sostituire questa riga Il tuo codice funziona bene

       

    Penso che il modo migliore sia utilizzare HttpPostedFileBase nel tuo controller o API. Dopo questo puoi facilmente rilevare le dimensioni, digitare ecc.

    Proprietà del file che puoi trovare qui:

    MVC3 Come verificare se HttpPostedFileBase è un’immagine

    Ad esempio ImageApi:

     [HttpPost] [Route("api/image")] public ActionResult Index(HttpPostedFileBase file) { if (file != null && file.ContentLength > 0) try { string path = Path.Combine(Server.MapPath("~/Images"), Path.GetFileName(file.FileName)); file.SaveAs(path); ViewBag.Message = "Your message for success"; } catch (Exception ex) { ViewBag.Message = "ERROR:" + ex.Message.ToString(); } else { ViewBag.Message = "Please select file"; } return View(); } 

    Spero che aiuti.