Ist es möglich, eine Datei von einer Website im Windows-Antragsformular herunterzuladen und in ein bestimmtes Verzeichnis zu stellen?So laden Sie eine Datei von einer Website in C#
Antwort
Mit dem WebClient class:
using System.Net;
//...
WebClient Client = new WebClient();
Client.DownloadFile("http://i.stackoverflow.com/Content/Img/stackoverflow-logo-250.png", @"C:\folder\stackoverflowlogo.png");
Danke, das hat genau so funktioniert, wie ich es wollte! – S3THST4
Wie lade ich die Datei in einen Ordner relativ zum Verzeichnis der Anwendungsinstallation herunter? (Da Ihr Download-Pfad fest codiert ist) – RPDeshaies
@ Tareck117 AppDomain.CurrentDomain.BaseDirectory + "myname" – Luntri
Verwendung WebClient.DownloadFile
:
using (WebClient client = new WebClient())
{
client.DownloadFile("http://csharpindepth.com/Reviews.aspx",
@"c:\Users\Jon\Test\foo.txt");
}
SKEEEEEEEEEEEEEET! – FlySwat
IDisposable nicht vergessen; -p Aber (anders als ein "using") das ist genau das, was ich zum Schreiben kam ... –
Ah, normaler Service von den Pedanten wird wieder aufgenommen ;-p –
Sicher, man muss nur ein HttpWebRequest
verwenden.
Sobald Sie die HttpWebRequest
eingerichtet haben, können Sie die Antwortstream in einer Datei speichern StreamWriter
(Entweder BinaryWriter
oder ein TextWriter
je nach MIME-Typ.) Und Sie haben eine Datei auf Ihrer Festplatte.
EDIT: Forgot über WebClient
. Das funktioniert gut, es sei denn, Sie müssen nur GET
verwenden, um Ihre Datei abzurufen. Wenn die Website erfordert, dass Sie POST
Informationen dazu, müssen Sie eine HttpWebRequest
verwenden, so dass ich meine Antwort verlassen.
Ich möchte es nicht von einem langsamen hd .. lesen. Https://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.getresponse(v=vs.110).aspx – Dan
dieses Beispiel:
public void TheDownload(string path)
{
System.IO.FileInfo toDownload = new System.IO.FileInfo(HttpContext.Current.Server.MapPath(path));
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.AddHeader("Content-Disposition",
"attachment; filename=" + toDownload.Name);
HttpContext.Current.Response.AddHeader("Content-Length",
toDownload.Length.ToString());
HttpContext.Current.Response.ContentType = "application/octet-stream";
HttpContext.Current.Response.WriteFile(patch);
HttpContext.Current.Response.End();
}
Die Umsetzung wird in der folgt durchgeführt:
TheDownload("@"c:\Temporal\Test.txt"");
Quelle: http://www.systemdeveloper.info/2014/03/force-downloading-file-from-c.html
Sie können auch DownloadFileAsync
Methode in WebClient
Klasse verwenden. Es lädt die Ressource mit der angegebenen Nummer URI
in eine lokale Datei herunter. Auch diese Methode blockiert den aufrufenden Thread nicht.
Probe:
webClient.DownloadFileAsync(new Uri("http://www.example.com/file/test.jpg"), "test.jpg");
Für weitere Informationen:
http://csharpexamples.com/download-files-synchronous-asynchronous-url-c/
Sie diesen Code verwenden können Datei von einer Website auf dem Desktop zum Download:
using System.Net;
WebClient Client = new WebClient();
client.DownloadFileAsync(new Uri("http://www.Address.com/File.zip"), Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "File.zip");
Möglicherweise müssen Sie den Status während des Herunterladens der Datei kennen oder die Anmeldeinformationen verwenden, bevor Sie die Anfrage stellen.Hier
ist ein Beispiel, das diese Optionen umfasst:
Uri ur = new Uri("http://remotehost.do/images/img.jpg");
using (WebClient client = new WebClient()) {
//client.Credentials = new NetworkCredential("username", "password");
String credentials = Convert.ToBase64String(Encoding.ASCII.GetBytes("Username" + ":" + "MyNewPassword"));
client.Headers[HttpRequestHeader.Authorization] = $"Basic {credentials}";
client.DownloadProgressChanged += WebClientDownloadProgressChanged;
client.DownloadDataCompleted += WebClientDownloadCompleted;
client.DownloadFileAsync(ur, @"C:\path\newImage.jpg");
}
Und die Funktionen des Callback wie folgt umgesetzt:
void WebClientDownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
Console.WriteLine("Download status: {0}%.", e.ProgressPercentage);
// updating the UI
Dispatcher.Invoke(() => {
progressBar.Value = e.ProgressPercentage;
});
}
void WebClientDownloadCompleted(object sender, DownloadDataCompletedEventArgs e)
{
Console.WriteLine("Download finished!");
}
Lambda-Notation: andere mögliche Option für die Handhabung der Ereignisse
client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(delegate(object sender, DownloadProgressChangedEventArgs e) {
Console.WriteLine("Download status: {0}%.", e.ProgressPercentage);
// updating the UI
Dispatcher.Invoke(() => {
progressBar.Value = e.ProgressPercentage;
});
});
client.DownloadDataCompleted += new DownloadDataCompletedEventHandler(delegate(object sender, DownloadDataCompletedEventArgs e){
Console.WriteLine("Download finished!");
});
Wir können
client.DownloadProgressChanged += (object sender, DownloadProgressChangedEventArgs e) =>
{
Console.WriteLine("Download status: {0}%.", e.ProgressPercentage);
// updating the UI
Dispatcher.Invoke(() => {
progressBar.Value = e.ProgressPercentage;
});
};
client.DownloadDataCompleted += (object sender, DownloadDataCompletedEventArgs e) =>
{
Console.WriteLine("Download finished!");
};
Oder
client.DownloadProgressChanged += (o, e) =>
{
Console.WriteLine($"Download status: {e.ProgressPercentage}%.");
// updating the UI
Dispatcher.Invoke(() => {
progressBar.Value = e.ProgressPercentage;
});
};
client.DownloadDataCompleted += (o, e) =>
{
Console.WriteLine("Download finished!");
};
Wenn Sie 'async Task' anstelle von' async void' verwenden möchten, sehen Sie sich [diese Antwort] (http://stackoverflow.com/a/16514441/2816057) an, die 'awar WebClient.DownloadFileTaskAsync (...)' verwendet also keine Notwendigkeit für ein 'DownloadDataCompleted' Ereignis –
- 1. So laden Sie eine ZIP-Datei von einer Site (Python)
- 2. So laden Sie eine Datei von einer Website in die iCloud eines Benutzers
- 3. So laden Sie CSV-Daten von einer Website mit Selenium
- 4. So laden Sie eine Datei in asp.net mit C#
- 5. So laden Sie Bilder von einer Website mit Phantomjs
- 6. So laden Sie eine Datei mit curl
- 7. So laden Sie eine Datei von einem Server
- 8. So laden Sie eine temporäre Datei herunter
- 9. Java - So laden Sie die vollständige Quelle einer HTML-Website
- 10. So laden Sie eine Datei und lesen Sie den Inhalt einer Datei in Android
- 11. So laden Sie eine Datei von Google Drive
- 12. So laden Sie eine Datei von owncloud mit curl, wget
- 13. So führen Sie eine Setup-Datei von Sharepoint mit C#
- 14. So erstellen, laden und löschen Sie Datei in einer Anfrage
- 15. So laden Sie eine Datei auf Google Drive
- 16. So lesen/laden Sie eine JSON-Datei in Typescript
- 17. So verwenden Sie gpfdist zum direkten Laden von Daten in eine db anstelle einer Datei
- 18. So laden Sie eine Datei von einer Android-Anwendung in den Tomcat 6 Server
- 19. So laden Sie eine JS-Datei auf Magento Admin-Dashboard
- 20. So laden Sie eine Datei mit Powershell-Skript von einer URL herunter und erzwingen tls 1.1
- 21. Laden Sie eine Datei in Ocaml rekursiv
- 22. So laden Sie eine PDF-Datei mit Retrofit 2
- 23. So laden Sie eine Datei/ein Bild durch Tastypie
- 24. So laden Sie in die WAR-Datei von JBOSS Server
- 25. So identifizieren Sie eine Website zuverlässig
- 26. Laden Sie eine Datei in ASP.net MVC2 mit C#
- 27. So erstellen Sie eine verwendbare Datei zum Laden als Java.utils.prefs.Preferences
- 28. extrahieren Svg laden Symbol von einer Website
- 29. So laden Sie eine Datei vom Server mit PHP Code
- 30. Laden Sie eine Datei in AIr, Flex
was Transport besser machen? FTP? HTTP? –
Mitchs Kommentar ist die direkteste und genaueste Antwort, lol! – Cerebrus
Sofern Sie nicht neu bei .net sind, würde ich empfehlen, die MSDN-Dokumentation zu durchsuchen. Suchen Sie nach Dingen, die Sie erreichen möchten, lok in welchem Namespace dies passt und sehen Sie, ob es eine Klasse gibt, die das tun kann. – shahkalpesh