none
Validar Error en Archivo CSV ASP MVC RRS feed

  • Pregunta

  • Buenas tardes, tengo la siguiente duda.

    He logrado Subir un archivo csv desde mi aplicación en asp mvc 5, pero no se como hacer para validar el archivo antes de subirlo, me refiero si falta alguna coma(,) o en alguna línea haya un error que este me lo muestre.

    Alguien me puede asesorar?? Lo agradezco mucho

    Este es el código con lo que cargo actualmente el archivo csv

    [HttpPost]
            public ActionResult CargueInspectores(HttpPostedFileBase FileUpload)
            {
                //Creo el datatable
                DataTable dt = new DataTable();
    
                if (FileUpload != null)
                {
                    string fileName = Path.GetFileName(FileUpload.FileName);
                    string path = Path.Combine(Server.MapPath("~/App_Data/uploads"), fileName);
                    try
                    {
                        FileUpload.SaveAs(path);
                        dt = ProcessCSV(path);
                        //ViewData["Feedback"] = "Carga Completa";
                    }
                    catch (Exception ex)
                    {
                        //Catch error
                        ViewData["Feedback"] = ex.Message;
                    }
                }
                else
                {
                    //Catch error
                    ViewData["Feedback"] = "Por favor seleccione un archivo";
                }
                dt.Dispose();
    
                return View("CargueInspectores", ViewData["Feedback"]);            
            }

    lunes, 5 de mayo de 2014 21:56

Todas las respuestas

  • [...] como hacer para validar el archivo antes de subirlo [...]

    No puedes validarlo antes de subirlo. El código de validación se va a ejecutar en el lado servidor, por lo que es necesario que primero el archivo se transmita al servidor para que éste pueda examinar su contenido y determinar si es válido.

    Lo que no hace falta es que primero salves el archivo en disco para luego validarlo. Podrías perfectamente validarlo sobre la marcha a partir del Stream que te devuelve el FileUpload.

    FileUpload.InputStream te devuelve un Stream que podrías leer (por ejemplo) con un StreamReader. Según vayas leyendo líneas, vas comprobando que sean correctas y si lo son las pasas a registros del datatable; en caso contrario, muestras el error. El código necesario para hacer este procesamiento probablemente sea muy similar al que ya debes de tener dentro de tu método ProcessCSV, con lo que no te debería costar demasiado trabajo modificarlo.

    martes, 6 de mayo de 2014 6:34
  • Gracias por tu respuesta, cuando digo antes de subir me refiero a antes me insertarlo a la base de datos pero si soy consiente de que este archivo debe estar en el servidor para ser validado.

    Sigo sin saber como validar errores en el. Agradezco tu colaboracion

    martes, 6 de mayo de 2014 12:52
  • Pero ¿has probado lo que te he dicho? Es decir, leer el InputStream con un StreamReader y validarlo aplicando el mismo código de lectura de líneas que probablemente ya tienes escrito dentro del método ProcessCSV.

    Es decir, el código quedaría parecido a este:

            [HttpPost]
            public ActionResult CargueInspectores(HttpPostedFileBase FileUpload)
            {
                //Creo el datatable
                DataTable dt = new DataTable();
    
                if (FileUpload != null)
                {
                    StreamReader sr = new StreamReader(FileUpload.InputStream);
                    string linea;
                    while ((linea=sr.ReadLine()!=null)
                    {
                        //(1) Crear un DataRow
                        //(2) Trocear la línea por las comas.
                        //(3) Guardar cada campo en una columna del DataRow
                        //(4) Añadir la linea a dt
                    }
                    //(5) Salvar dt en la base de datos
    
                    //ViewData["Feedback"] = "Carga Completa";
                }
                else
                {
                    //Catch error
                    ViewData["Feedback"] = "Por favor seleccione un archivo";
                }
                dt.Dispose();
    
                return View("CargueInspectores", ViewData["Feedback"]);            
            } 

    Nótese que no es necesario salvar el fichero en disco, sino que directamente pasamos los datos a un DataTable y luego del DataTable a la base de datos.

    Los pasos (1) a (4) probablemente ya los tienes escritos dentro del método ProcessCSV, o al menos unos muy similares. Evidentemente si en el paso (2) no se encuentran las columnas adecuadas, o en el paso (3) alguna columna no tiene el tipo de dato correcto, arrojarías un error diciendo que los datos recibidos no son correctos.

    martes, 6 de mayo de 2014 13:37