Saltar al contenido

¿Por qué en mi método WebClient DownloadFileAsync descarga un archivo vacío?

Estate atento ya que en esta crónica vas a encontrar la solución que buscas.Esta división fue analizado por nuestros especialistas para asegurar la calidad y veracidad de nuestro post.

Solución:

Aquí está el código de trabajo. Había 2 cosas que no estabas haciendo, que estaban causando el 0 archivo de bytes que se va a descargar.

  1. no estabas llamando IsBusy. Eso debe llamarse para que el código espere a que se complete el hilo actual, ya que la acción asíncrona estará en un nuevo hilo.
  2. El sitio en cuestión estaba devolviendo una puerta de enlace incorrecta, a menos que falsifique la solicitud como si viniera de un navegador web normal.

Cree una aplicación de consola en blanco, coloque el siguiente código y pruébelo.

Pegue este código en el archivo Program.cs de la aplicación de consola nueva/en blanco.

namespace TestDownload

    class Program
    
        static void Main(string[] args)
        
            string sourceUrl = "http://ec.europa.eu/economy_finance/db_indicators/surveys/documents/series/nace2_ecfin_1409/all_surveys_total_sa_nace2.zip";
            string targetdownloadedFile = @"C:TempTestZip.zip";
            DownloadManager downloadManager = new DownloadManager();
            downloadManager.DownloadFile(sourceUrl, targetdownloadedFile);
        
    

Agregue un nuevo archivo de clase C# llamado DownloadManager y suelte este código en él.

using System;
using System.ComponentModel;
using System.Net;

namespace TestDownload

    public class DownloadManager
    
        public void DownloadFile(string sourceUrl, string targetFolder)
        
            WebClient downloader = new WebClient();
                // fake as if you are a browser making the request.
            downloader.Headers.Add("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0)");
            downloader.DownloadFileCompleted += new AsyncCompletedEventHandler(Downloader_DownloadFileCompleted);
            downloader.DownloadProgressChanged +=
                new DownloadProgressChangedEventHandler(Downloader_DownloadProgressChanged);
            downloader.DownloadFileAsync(new Uri(sourceUrl), targetFolder);
                // wait for the current thread to complete, since the an async action will be on a new thread.
            while (downloader.IsBusy)  
        

        private void Downloader_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
        
            // print progress of download.
            Console.WriteLine(e.BytesReceived + " " + e.ProgressPercentage);
        

        private void Downloader_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
        
                // display completion status.
            if (e.Error != null)
                Console.WriteLine(e.Error.Message);
            else
                Console.WriteLine("Download Completed!!!");
        
    

Ahora compila y ejecuta la aplicación de consola. Debería ver el progreso en la ventana de salida de la consola así.

Y cuando esté completo, debería ver el archivo zip en la ubicación especificada en el targetdownloadedFile variable, que en este ejemplo está en C:TempTestZip.zip en su máquina local.

¡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 *