Saltar al contenido

Cómo descargar un archivo de un sitio web en C#

Si hallas algún error con tu código o trabajo, recuerda probar siempre en un ambiente de testing antes aplicar el código al trabajo final.

Solución:

Con la clase WebClient:

using System.Net;
//...
WebClient Client = new WebClient ();
Client.DownloadFile("http://i.stackoverflow.com/Content/Img/stackoverflow-logo-250.png", @"C:folderstackoverflowlogo.png");

Utilizar WebClient.DownloadFile:

using (WebClient client = new WebClient())

    client.DownloadFile("http://csharpindepth.com/Reviews.aspx", 
                        @"c:UsersJonTestfoo.txt");

Es posible que necesite conocer el estado durante la descarga del archivo o usar las credenciales antes de realizar la solicitud.

Aquí hay un ejemplo que cubre estas opciones:

Uri ur = new Uri("http://remotehost.do/images/img.jpg");

using (WebClient client = new WebClient()) 
    //client.Credentials = new NetworkCredential("username", "password");
    String credentials = Convert.ToBase64String(Encoding.ASCII.GetBytes("Username" + ":" + "MyNewPassword"));
    client.Headers[HttpRequestHeader.Authorization] = $"Basic credentials";

    client.DownloadProgressChanged += WebClientDownloadProgressChanged;
    client.DownloadDataCompleted += WebClientDownloadCompleted;
    client.DownloadFileAsync(ur, @"C:pathnewImage.jpg");

Y las funciones de devolución de llamada implementadas de la siguiente manera:

void WebClientDownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)

    Console.WriteLine("Download status: 0%.", e.ProgressPercentage);

    // updating the UI
    Dispatcher.Invoke(() => 
        progressBar.Value = e.ProgressPercentage;
    );


void WebClientDownloadCompleted(object sender, DownloadDataCompletedEventArgs e)

    Console.WriteLine("Download finished!");

(Ver 2) – Notación lambda: otra opción posible para manejar los eventos

client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(delegate(object sender, DownloadProgressChangedEventArgs e) 
    Console.WriteLine("Download status: 0%.", e.ProgressPercentage);

    // updating the UI
    Dispatcher.Invoke(() => 
        progressBar.Value = e.ProgressPercentage;
    );
);

client.DownloadDataCompleted += new DownloadDataCompletedEventHandler(delegate(object sender, DownloadDataCompletedEventArgs e)
    Console.WriteLine("Download finished!");
);

(Ver 3) – Podemos hacerlo mejor

client.DownloadProgressChanged += (object sender, DownloadProgressChangedEventArgs e) =>

    Console.WriteLine("Download status: 0%.", e.ProgressPercentage);

    // updating the UI
    Dispatcher.Invoke(() => 
        progressBar.Value = e.ProgressPercentage;
    );
;

client.DownloadDataCompleted += (object sender, DownloadDataCompletedEventArgs e) => 

    Console.WriteLine("Download finished!");
;

(Ver 4) – O

client.DownloadProgressChanged += (o, e) =>

    Console.WriteLine($"Download status: e.ProgressPercentage%.");

    // updating the UI
    Dispatcher.Invoke(() => 
        progressBar.Value = e.ProgressPercentage;
    );
;

client.DownloadDataCompleted += (o, e) => 

    Console.WriteLine("Download finished!");
;

Si sostienes algún reparo o forma de aclararse nuestro noticia te mencionamos realizar una explicación y con placer lo estudiaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *