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.