Загруженный файл с использованием webclient.DownloadFileAsync имеет 0 КБ - PullRequest
0 голосов
/ 04 декабря 2011

Я пытаюсь загрузить Zend-Framework (из http://framework.zend.com/releases/ZendFramework-1.11.11/ZendFramework-1.11.11.zip) просто с помощью WebClient

string url = "http://framework.zend.com/releases/ZendFramework-1.11.11/ZendFramework-1.11.11.zip";
WebClient downloader= new WebClient();
downloader.DownloadFileAsync(new Uri(url), "C:\\temp.zip");

Файл создан, но он пуст. Я проверил ответ, используя fiddler, и получил HTTP 200, правильную длину содержимого, но «connection: closed», и fiddler показывает «-1» в столбце «body».

Я попытался добавить пользовательский агент (скопированный из запроса Google Chrome) и "connection: keep-alive" в заголовки, но ни один из них не помог. Я также почти уверен, что моя программа загружала этот файл один и тот же URL один или два раза раньше. В событиях, запускаемых WebClient, ошибок нет.

Есть идеи?

Ответы [ 4 ]

2 голосов
/ 04 декабря 2011

Хорошо, я наконец нашел ответ!Перед загрузкой файла я проверял его размер, отправляя HttpWebRequest.Проблема заключалась в том, что я не закрывал () ответ.

Спасибо за ответы, они были хорошими подсказками.

1 голос
/ 07 ноября 2014

Если в Windows включен контроль учетных записей «C: \ temp.zip», в следующей строке не удастся сохранить файл, поскольку вы не можете писать вне пользовательских каталогов без повышенных разрешений:

downloader.DownloadFileAsync(new Uri(url), "C:\\temp.zip");
1 голос
/ 04 декабря 2011

Только мое предположение: возможно, вы можете попытаться сохранить экземпляр WebClient в каком-то месте, где не будет мусора. Когда событие DownloadFileCompleted сработало, вы просто очищаете ссылку на экземпляр WebClient и позволяете GC позже восстановить память (и не забудьте вызвать метод Dispose).

1 голос
/ 04 декабря 2011

Попробуйте обработать события DownloadProgressChanged и DownloadFileCompleted.

private void button1_Click(object sender, EventArgs e)
  {
   string url = "http://framework.zend.com/releases/ZendFramework-1.11.11/ZendFramework-1.11.11.zip";
   WebClient downloader = new WebClient();
   downloader.DownloadFileCompleted += new AsyncCompletedEventHandler(downloader_DownloadFileCompleted);
   downloader.DownloadProgressChanged += new DownloadProgressChangedEventHandler(downloader_DownloadProgressChanged);
   downloader.DownloadFileAsync(new Uri(url), "C:\\temp.zip");
  }

 void downloader_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
   {
      label1.Text = e.BytesReceived + " " + e.ProgressPercentage;
    }
  void downloader_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
   {
       if (e.Error != null)
         MessageBox.Show(e.Error.Message);
       else
         MessageBox.Show("Completed!!!");
   }
...