Como subir un archivo con ASP.NET MVC

En esta entrada vamos a subir un archivo y guardarlo a una carpeta de nuestro proyecto.

Rodríguez Patiño, Eduardo
2020-11-28 | 34,331 lecturas

Bien muchachos, esta entrada es bastante práctica en la cual vamos a ver como subir un archivo a una carpeta en un par de pasos.

Creamos nuestro controlador
El cual contiene 2 acciones, una que la vista que contendra al formulario de subida y la otra es la acción encargada de subir el archivo.

public class HomeController : Controller
{
    //
    // GET: /Home/

    public ActionResult Index()
    {
        return View();
    }

    [HttpPost]
    public void Subir(HttpPostedFileBase file) 
    {
        if (file == null) return;

        string archivo = (DateTime.Now.ToString("yyyyMMddHHmmss") + "-" + file.FileName).ToLower();

        file.SaveAs(Server.MapPath("~/Uploads/" + archivo));
    }
}

Como pueden ver, el código de la acción Subir no es nada del otro mundo y contiene la etiqueta [HttpPost] para indicarle que solo reciba peticiones del tipo POST.

Creando la vista

@using (Html.BeginForm("subir", "home", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    <input type="file" name="file" /> <button type="submit">Subir archivo</button>
}

Creamos una etiqueta de formulario y le especificamos que la información a enviar va a contener archivos a subir "multipart/form-data". El nombre del control, en este caso el input file debe ser igual que el parametro que recibe nuestra acción name="file".

Analizando el código de la acción "Subir"

string archivo = (DateTime.Now.ToString("yyyyMMddHHmmss") + "-" + file.FileName).ToLower();
file.SaveAs(Server.MapPath("~/Uploads/" + archivo));

Guardo el nombre del archivo actual concatenado la fecha y hora, porque si vuelvo a subir el mismo archivo este lo va a querer remplazar.

Luego le indico que mueva el archivo actual a la siguiente ruta. No te olvides crear una carpeta Uploads dentro de tu proyecto.