varios net link form descargar con asp archivos archivo c# download windows

net - descargar archivo xml c#



Cómo descargar un archivo desde un sitio web en C# (7)

Claro, solo usas una HttpWebRequest .

Una vez que haya configurado HttpWebRequest , puede guardar la secuencia de respuesta en un archivo StreamWriter (ya sea BinaryWriter , o un TextWriter según el tipo de TextWriter ) y tenga un archivo en su disco duro.

EDITAR: se olvidó de WebClient . Eso funciona bien a menos que siempre que solo necesite usar GET para recuperar su archivo. Si el sitio requiere que le POST información, tendrá que usar una HttpWebRequest , así que dejo mi respuesta.

¿Es posible descargar un archivo de un sitio web en el formulario de aplicación de Windows y colocarlo en un directorio determinado?


Con la clase WebClient :

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


Es posible que necesite conocer el estado durante la descarga del archivo o usar 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:/path/newImage.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!"); }

Notación de 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!"); });

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!"); };

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!"); };


Prueba este ejemplo:

public void TheDownload(string path) { System.IO.FileInfo toDownload = new System.IO.FileInfo(HttpContext.Current.Server.MapPath(path)); HttpContext.Current.Response.Clear(); HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + toDownload.Name); HttpContext.Current.Response.AddHeader("Content-Length", toDownload.Length.ToString()); HttpContext.Current.Response.ContentType = "application/octet-stream"; HttpContext.Current.Response.WriteFile(patch); HttpContext.Current.Response.End(); }

La implementación se realiza de la siguiente manera:

TheDownload("@"c:/Temporal/Test.txt"");

Fuente: http://www.systemdeveloper.info/2014/03/force-downloading-file-from-c.html


Puede usar este código para descargar archivos de un sitio web a un escritorio:

using System.Net; WebClient Client = new WebClient (); client.DownloadFileAsync(new Uri("http://www.Address.com/File.zip"), Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "File.zip");


También puede usar el método DownloadFileAsync en la clase WebClient . Descarga a un archivo local el recurso con el URI especificado. Además, este método no bloquea el hilo de llamada.

Muestra:

webClient.DownloadFileAsync(new Uri("http://www.example.com/file/test.jpg"), "test.jpg");

Para más información:

http://csharpexamples.com/download-files-synchronous-asynchronous-url-c/


Use WebClient.DownloadFile :

using (WebClient client = new WebClient()) { client.DownloadFile("http://csharpindepth.com/Reviews.aspx", @"c:/Users/Jon/Test/foo.txt"); }