Capacítate con nosotros. Ir a KODOTI
Capacítate con nosotros. KODOTI

Como subir varios archivos a la vez con ASP.NET MVC

Veremos como subir varios archivos a una carpeta de nuestro servidor usando ASP.NET MVC.

Rodríguez Patiño, Eduardo
9,868 lecturas
Rodríguez Patiño, Eduardo
Hemos migrado nuestras publicaciones del blog antiguo. Si crees que esta se encuentra incompleta o sin coherencia deja un comentario para darle una pronta solución.

Esta entrada es muy parecida a la anterior, en que la enseñamos a subir un solo archivo , la diferencia ahora que veremos como subir varios archivos a la vez.

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 los archivos. Recibe un array de la clase HttpPostedFileBase.

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

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

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

        foreach (var f in file) 
        {
            if (f != null) 
            {
                string archivo = (DateTime.Now.ToString("yyyyMMddHHmmss") + "-" + f.FileName).ToLower();
                f.SaveAs(Server.MapPath("~/Uploads/" + archivo));
            }
        }
    }
}

Creando la vista

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

Creamos nuestra vista pero ahora declarando varios controles del tipo file, a cada control le ponemos el mismo nombre para nuestro caso "file". El nombre del control debe ser igual al parametro que recibe nuestra acción subir. Varios han tenido problema con esto por no darse cuenta de ese pequeño detalle.

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

if (file == null) return;

foreach (var f in file) 
{
    if (f != null) 
    {
        string archivo = (DateTime.Now.ToString("yyyyMMddHHmmss") + "-" + f.FileName).ToLower();
        f.SaveAs(Server.MapPath("~/Uploads/" + archivo));
    }
}

Validamos que el parámetro a enviar no sea NULL, ya que esto haría que se caiga el foreach.

Luego recorro el array, y  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:  "~/Uploads/", no te olvides crear una carpeta Uploads dentro de tu proyecto.


Estudia con nosotros

🚀 Mejora tus oportunidades laborales


¿Te gustó nuestra publicación?
Suscríbete a nuestro boletín