MVC 4 Razor File Upload

Eu sou novo no MVC 4 e estou tentando implementar o Controle de Upload de Arquivos no meu site. Não consigo encontrar o erro.Estou recebendo um valor nulo no meu arquivo.

Controlador:

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

Visão:

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

O parâmetro HttpPostedFileBase do método Upload deve ter o mesmo nome da file input do file input .

Então apenas mude a input para isso:

  

Além disso, você pode encontrar os arquivos em 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"); } 

Esclarecendo isso. Modelo:

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

Pós-ação

 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, o método de extensão para verificar o 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; } } } 

Ver pagina

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

Arquivo de script

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

No controlador

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

você apenas tem que mudar o nome do seu campo de input porque o mesmo nome é requerido no parâmetro e no nome do campo de input apenas substitua esta linha Seu código está funcionando bem

   

Eu acho, melhor maneira é usar HttpPostedFileBase no seu controlador ou API. Depois disso, você pode simplesmente detectar o tamanho, digitar etc.

Propriedades do arquivo que você pode encontrar aqui:

MVC3 Como verificar se o HttpPostedFileBase é uma imagem

Por exemplo, 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(); } 

Espero que ajude.