none
Problema con excel desde IIS RRS feed

  • Pregunta

  • Estimados, tengo un método que lee un archivo excel con OleDb y lo carga a un List, esto funciona bien el el visual studio, el problema es que al ejecutar esta misma acción desde la app alojada en el iis no me permite hacer la lectura del fichero excel, y la consola del browser arroja el siguiente error:

    "Acceso denegado a la ruta de acceso 'C:\inetpub\wwwroot\myWeb\clientes.xlsx'.')"

    Así capturo la ruta, desde el codebehind, invoco este método y le paso el control fileupload por parametro, no se si será buena práctica hacer esto, pero al ejecutar desde visual studio funciona muy bien.

     public static string getPath(FileUpload fileUp)
     {
                string path = "";
                string ruta = "";
                string strCon = "";
    
                path = System.Web.HttpContext.Current.Server.MapPath("~/");
                fileUp.SaveAs(path+fileUp.FileName);
                ruta = path + fileUp.FileName;
    
                string strExtension = System.IO.Path.GetExtension(fileUp.FileName);
    
                if (!(strExtension == ".xlsx"))
                {
                    throw new Exception("El archivo seleccionado no posee un formato excel");
                }
    
                return strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + ruta + ";Extended Properties=\"Excel 12.0 Xml;HDR=NO;\"";
            }

    code behind:

        OleDbCommand command = null;
        OleDbDataReader reader = null;
      
      using (OleDbConnection conn = new OleDbConnection(getPath(fileUp)))
      {
             conn.Open();
             command = new OleDbCommand("SELECT * FROM [hoja1$]", conn);
             reader = command.ExecuteReader();
    
                        
    
             if (reader.HasRows)
             {
                   while (reader.Read())
                   {
                          //leo filas y cargo al list
                   }
            }
       }

    Como les comenté, funciona bien en visual, el problema es en el iis :/

    lunes, 26 de junio de 2017 7:12

Respuestas

  • hola

    Es correcto el uso del Server.MapPath() para definir la ruta base del sitio web

    Ahora porque el metodo lo defines como "static" ? si el metodo esta dentro del aspx.cs no necesita ser static, con lo cual podrias acceder directo al Server sin el uso del HttpContext

    >>Acceso denegado a la ruta de acceso

    validaste los permisos en la carpeta? usa el Explorador de Windows y valida la seguridad

    Tambien debes validar con que usuario ejecuta el sitio, esto lo veras en el Application Pool que hayas asignado en la propiedad Identity

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 26 de junio de 2017 11:27