Heruntergeladene Datei mit webclient.downloadFileasync hat 0 KB
-
27-10-2019 - |
Frage
Ich versuche Zend-Framework (von http://framework.zend.com/releases/zendframework-1.11.11/zendframework-1.11.11.zip) einfach mit Webclient verwenden
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");
Die Datei wird erstellt, aber leer. Ich habe die Antwort mit Fiddler und ich überprüft HTTP 200, korrekte inhaltliche Länge, aber "Verbindung: geschlossen" und Fiddler zeigt "-1" in der Spalte "Body".
Ich habe versucht, Benutzeragenten (von Google Chrome Request kopiert) und "Verbindung: Keep-Alive" zu Headers, aber keine davon hat geholfen. Ich bin mir auch ziemlich sicher, dass mein Programm diese Datei ein- oder zweimal mit derselben URL heruntergeladen hat. Es gibt keine Fehler in Ereignissen, die von WebClient abgefeuert wurden.
Irgendwelche Ideen?
Lösung
Nur meine Vermutung: Vielleicht können Sie versuchen, die Webclient -Instanz an einem Ort zu behalten, wäre nicht der Müll. Wenn das DownloadFileCompleted -Ereignis abgefeuert hat, reinigen Sie einfach den Verweis auf die Webclient -Instanz und lassen GC den Speicher später zurückerobern (und vergessen Sie nicht, die Methode anzurufen).
Andere Tipps
Ok, ich habe die Antwort gefunden! Vor dem Herunterladen der Datei habe ich ihre Größe überprüft, indem ich httpwebRequest gesendet habe. Das Problem war, dass ich die Antwort nicht schließt ().
Danke für die Antworten, sie waren schöne Hinweise.
Versuchen Sie, mit dem umzugehen DownloadProgressChanged
und DownloadFileCompleted
Veranstaltung.
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!!!");
}
Wenn Sie in der folgenden Zeile in Windows "C: temp.zip" in Windows aktiviert sind, speichern Sie die Datei nicht, da Sie ohne erhöhte Berechtigungen nicht außerhalb von Benutzerverzeichnissen schreiben dürfen:
downloader.DownloadFileAsync(new Uri(url), "C:\\temp.zip");