Загруженный файл с использованием webclient.downloadfileasync имеет 0 кб
-
27-10-2019 - |
Вопрос
Я пытаюсь скачать 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, правильную длину содержимого, но «соединение: закрыто» и Fiddler показывает «-1» в колонке «Body».
Я попытался добавить пользовательского агента (скопированного из Google Chrome запроса) и «Подключение: Keep-Alive» к заголовкам, но ни одно из них не помогло. Я также уверен, что моя программа загрузила этот файл, используя один и тот же URL -адрес один или два раза раньше. В событиях нет ошибок, запущенных WebClient.
Любые идеи?
Решение
Просто мое предположение: может быть, вы можете попытаться сохранить экземпляр WebClient в каком -то месте, не будет собранным мусором. Когда запущенное событие Download FileCopletled, вы просто очистите ссылку на экземпляр WebClient и позволяете GC восстановить память позже (и не забудьте вызвать метод утилизации).
Другие советы
ОК, я Финнее нашла ответ! Перед загрузкой файла я проверял его размер, отправив httpwebrequest. Проблема заключалась в том, что я не закрыл () ответ.
Спасибо за ответы, они были хорошими подсказками.
Попробуйте справиться 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!!!");
}
Если у вас включен UAC в Windows "C: temp.zip" в следующей строке не может сохранить файл, потому что вам не разрешено писать вне каталогов пользователей без повышенных разрешений:
downloader.DownloadFileAsync(new Uri(url), "C:\\temp.zip");