MVC 4 Razor File Upload

Je suis nouveau sur MVC 4 et j’essaie d’implémenter File Upload Control dans mon site Web. Je ne parviens pas à trouver l’erreur. Je reçois une valeur nulle dans mon fichier.

Manette:

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

Vue:

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

Le paramètre HttpPostedFileBase la méthode Upload doit avoir le même nom que l’ file input du file input .

Il suffit donc de modifier l’entrée à ceci:

  

Vous pouvez également trouver les fichiers dans 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"); } 

Le clarifier Modèle:

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

Post action

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

Enfin la méthode d’extension pour vérifier le 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; } } } 

Voir page

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

Fichier de script

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

En contrôleur

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

il vous suffit de changer le nom de votre entrée déposée car le même nom est requirejs dans le paramètre et le nom du champ d’entrée remplacez simplement cette ligne Votre code fonctionne correctement

   

Je pense que le meilleur moyen est d’utiliser HttpPostedFileBase dans votre contrôleur ou API. Après cela, vous pouvez simplement détecter la taille, le type, etc.

Propriétés du fichier que vous pouvez trouver ici:

MVC3 Comment vérifier si HttpPostedFileBase est une image

Par exemple ImageApi:

 [HttpPost] [Route("api/image")] public ActionResult Index(HttpPostedFileBase file) { if (file != null && file.ContentLength > 0) try { ssortingng 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.ToSsortingng(); } else { ViewBag.Message = "Please select file"; } return View(); } 

J’espère que ça aide.