descargar y guardar un archivo en .net c#

Feb 07, 2012 7 Comments by

WebClient, es una clase en .NET del package System.Net, permite enviar o recibir datos de recursos indentificados por una URL (ejemplo, un enlace FTP ). El siguiente ejemplo permite descargar y guardar un archivo en .NET C#

     
   
   
   

using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.IO;
namespace ExampleDownloadFile
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                WebClient webClient = new WebClient();
                webClient.DownloadFile("http://example.org/data.zip", @"c:/data.zip");
            }
            catch( Exception ex)
            {
                System.Console.WriteLine( "Problem: " + ex.Message );
            }
        }
    }
}

Toda la ciencia la realiza la el método DownloadFile, que permite descargar y guardar el archivo en forma sincrona.

.NET C#

About the author

Ingeniero en Informática, Oracle Certified Master Java EE 6 Enterprise Architect, Oracle Certified Professional Java Programmer. Experto en distintas ramas de la computación y otras "yerbas" xD. Si te gusto este post, sígueme en @deerme_org, escríbeme a info AT deerme.org o contactame por linkedin.

7 Responses to “descargar y guardar un archivo en .net c#”

  1. erickson says:

    amigo tengo un problema y es que quiero que lo que se descargue aparesca en una carpeta por ejemplo en la carpeta de mis documentos o en el escritorio

  2. deerme.org says:

    Hola Erickson

    Si, a través del objeto global Environment, podemos obtener la ruta del directorio “Mis Documentos”. Te dejo el código modifcado que es capaz de crear una nueva carpeta dentro de “Mis Documentos”.

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Net;
    using System.IO;
    namespace ExampleDownloadFile
    {
        class Program
        {
            static void Main(string[] args)
            {
                try
                {
    
                    WebClient webClient = new WebClient();
                    // Proxy
                    webClient.Proxy = new WebProxy("190.109.64.4:3128");
                    // My Document Folder with a new folder
                    String newFolder = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "/ExampleFolder/";
                    Console.WriteLine("New Folder:" + newFolder);
                    // Create the Folder
                    if ( !Directory.Exists(newFolder))
                    {
                        Directory.CreateDirectory(newFolder);
                        Console.WriteLine("Folder created: " + newFolder);
                    }
                    // Download the File
                    webClient.DownloadFile("http ://example.org/data.zip", newFolder + "data.zip");
                    Console.WriteLine("File downloaded");
                }
                catch( Exception ex)
                {
                    System.Console.WriteLine( "Problem: " + ex.Message );
    
                }
                Console.ReadKey();
            }
        }
    
    }
  3. Ronnie says:

    Hola, tengo el siguiente problema y aún no se solucionarlo.
    Deseo realizar la descarga de un directorio completo (dentro abría archivos pdf, doc y zip).
    ¿Es posible como descarga directa del directorio sin identificar el nombre de los archivos dentro de ese directorio?
    Saludos.

  4. Zuko says:

    Este método sirve para descargar un formato de una DB en SQL… su función es para WPF,ASP y FROM

    private void Button_Click(object sender, RoutedEventArgs e)
    {
    // is the line of code Of template 2XH
    using (SqlConnection cn = new SqlConnection(@”Data Source=DESKTOP-N1GRH28; Initial Catalog= Etiquetas_Soriana; Trusted_Connection=Yes”))
    {
    string sPathToSaveFileTo = @”C:\Users\Allware\Documents\xml_prueba_soriana\2xh.xml”;
    string contenttype = String.Empty;
    cn.Open();
    SqlCommand cmd = new SqlCommand(“sp_GetXmlTipoHoja”, cn);
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.AddWithValue(“@Id”, valor);
    SqlDataReader dr = cmd.ExecuteReader();
    if (dr.Read())
    {
    // read in using GetValue and cast to byte array
    byte[] fileData = (byte[])dr.GetValue(0);
    // write bytes to disk as file
    using (System.IO.FileStream fs = new System.IO.FileStream(sPathToSaveFileTo, System.IO.FileMode.Create, System.IO.FileAccess.ReadWrite))
    {
    // use a binary writer to write the bytes to disk
    using (System.IO.BinaryWriter bw = new System.IO.BinaryWriter(fs))
    {
    bw.Write(fileData);
    bw.Close();
    }
    }
    }
    }
    }

  5. Sergio says:

    Hola, deerme:
    Utilicé tu código en el evento click de un boton, pero al presionarlo en el cliente el archivo se descarga en el servidor.
    si le doy la ruta con el hostname del cliente me dice “permiso denegado” ¿cómo puedo hacer para descargarlo en el cliente o pasarle las credenciales del administrador al servidor

  6. deerme.org says:

    Hola Sergio

    Desconozco el contexto en que estás trabajando (si es escritorio o una aplicación web), según mi perspectiva, creo que lo ideal sería hacer un buffer de la descargar del archivo, entonces, el servidor descarga una parte y lo libera al cliente. Sin embargo, está solución requiere de mucho más código.

    Lo más sencillo, sería que el servidor descargue el archivo y luego tu cliente lo baja desde el servidor, y la otra opción (que también es válida según si es que quieres que tu cliente conozca la url real) es simplemente que el cliente baje directamente desde la url (lo re-direccionas).

    Saludos

Leave a Reply to Sergio

Cancel Reply


+ 3 = eleven