none
como descargar un archivo usando webbrowser? RRS feed

  • Pregunta

  • Hola, alguien podría orientarme con esto, quiero descargar un archivo de una pagina web sin mostrar  usando el control webbrowser, sin que se muestre cuadro de dialogo de descarga, que se descargue automáticamente. El elemento que quiero descargar tiene el siguiente código:

    <a class="accionicon" href="/Exito/DownloadRepresentacionImpresa?rfc=XXXXX000XX&amp;uuid=99094a5f-547a-474e-852d-5fe75f36e218" style="color:inherit;"><span title="Descargar representación impresa" class="glyphicon glyphicon-file"></span></a>

    cabe mencionar que el url no es el mismo, se autogenera uno diferente en cada sesión dentro de la pagina

    martes, 9 de enero de 2018 2:51

Respuestas

Todas las respuestas

  • Primero busca en la cadena el contenido del href, que en este caso sería "Exito/DownloadRepresentacionImpresa?rfc=XXXXX000XX&amp;uuid=99094a5f-547a-474e-852d-5fe75f36e218" (sin las comillas). Puedes usar para ello las funciones de manipulación de cadena tales como IndexOf y SubString, o un Regex si sabes como usarlo. Después pásale ese string al método DownloadFile de la clase WebClient (en System.Net):

    https://msdn.microsoft.com/en-us/library/ez801hhe(v=vs.110).aspx

    Eso te descarga el fichero directamente sin ningún cuadro de diálogo.

    martes, 9 de enero de 2018 7:06
    Moderador
  • Usando WebBrowser para navegar y WebClient para la descarga el código sería así:

    private void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e)
        {
            if (e.Url.ToString()== \\ Si es una rruta de descarga ) 
            {
               e.Cancel = true;
               WebClient client = new WebClient();
               // evento descarga completa
               client.DownloadDataCompleted += new DownloadDataCompletedEventHandler(client_DescargaCompletada);
    
               client.DownloadDataAsync(e.Url);
            }
        }
    
        void client_DescargaCompletada(object sender, DownloadDataCompletedEventArgs e)
        {
            // aqui generamos la ruta donde dejar el arhcivo.
            string nombreFichero="MiFicheroDEscargado.loquesea"
            string rutaDestino= Path.Combine("C:\\descargasWeb",nombreFichero);
            File.WriteAllBytes(filepath, e.Result);
        }


    Tambíen puedes hacerlo todo en BackGround solo con WebClient y descarga el arhcivo directamente , lo explica bien el link quye tedaran en la priemra rspuesta.


    • Editado vyrcyrus_ martes, 9 de enero de 2018 7:24
    • Propuesto como respuesta vyrcyrus_ martes, 9 de enero de 2018 9:36
    martes, 9 de enero de 2018 7:14
  • hola

    pero alli veo que necesitas primero cargar una pagina, obtener la url y luego realizar la descarga, o sea no es simplemente descargar

    podrias hacer esto mismo con el WebClient, y un parse de html como ser el

    HtmlAgilityPack

    Download Files from Web [C#]

    con esto no neesitas ningun control en el form

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 9 de enero de 2018 12:55