Estamos trabajando en algo propio llamado KODOTI. Click para unirte
Se viene KODOTI. Únete

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,596 lecturas
Rodríguez Patiño, Eduardo
Hemos migrado hace poco nuestras publicaciones del blog antiguo. Si crees que esta se encuentra incompleta o sin coherencia deja un comentario para restaurarla manualmente.

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.

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