net mvc how asp asp.net-mvc file-upload

asp.net mvc - how - MVC 4 Razor File Upload



upload file mvc 5 (5)

Aclarándolo. 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; }

Acción posterior

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 el método de extensión para comprobar el 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; } } }

Soy nuevo en MVC 4 y estoy tratando de implementar el Control de carga de archivos en mi sitio web. No puedo encontrar el error. Tengo un valor nulo en mi archivo.

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

Ver:

@using (Html.BeginForm("Upload", "Upload", FormMethod.Post, new { enctype = "multipart/form-data" })) { <input type="file" name="FileUpload" /> <input type="submit" name="Submit" id="Submit" value="Upload" /> }


Creo que la mejor manera es usar HttpPostedFileBase en su controlador o API. Después de esto puedes simplemente detectar el tamaño, el tipo, etc.

Propiedades de archivo que puedes encontrar aquí:

MVC3 Cómo verificar si HttpPostedFileBase es una imagen

Por ejemplo 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 te ayude.


El parámetro HttpPostedFileBase del método Upload debe tener el mismo nombre que la file input .

Así que solo cambia la entrada a esto:

<input type="file" name="file" />

Además, puedes encontrar los archivos en los archivos de 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"); }


Ver pagina

@using (Html.BeginForm("ActionmethodName", "ControllerName", FormMethod.Post, new { id = "formid" })) { <input type="file" name="file" /> <input type="submit" value="Upload" class="save" id="btnid" /> }

archivo de comandos

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

En el controlador

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


solo tiene que cambiar el nombre de la entrada ingresada porque se requiere el mismo nombre en el parámetro y el nombre del campo de entrada simplemente reemplace esta línea Su código funciona bien

<input type="file" name="file" />