2016-05-14 5 views
0

Mein Problem downloaden ist, dass ich weiß nicht, wie ich eine Datei herunterladen kann die Dateinamen oder die Dateierweiterung in der URL, wie diese http://findicons.com/icon/download/235456/internet_download/128/png?id=235724Wie kann ich eine Datei ohne Dateinamen und Dateierweiterung in der URL

withknowing Ich hoffe, Sie können mir helfen

+0

denken Sie, teilen Sie Ihre Beispiel-Code? –

+1

Es hängt vom Webserver ab, welches Ergebnis er sendet. Wenn es sich um eine Datei handelt, teilt der Server dem Client den Inhalt und den Namen der Datei mit. Sie müssen eine Anfrage senden, um festzustellen, um welche Erweiterung es sich handelt. Es gibt keine Möglichkeit zu wissen, ohne zu kommunizieren. – Laurence

+0

Ich möchte die Datei herunterladen, ohne den Namen und die Erweiterung in Ordner zu kennen. –

Antwort

0

Sie können den Antwortkopf Content-Disposition mit einer HTTP Anfrage, um den Dateinamen zu erhalten. Dies wäre eine allgemeinere Lösung sein, also auch dann, wenn der Dateiname nicht in der URL enthalten ist, würde es funktionieren:

var url = "http://findicons.com/icon/download/235456/internet_download/128/png?id=235724"; 
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url); 
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) 
{ 
    var fn = response.Headers["Content-Disposition"].Split(new string[] { "=" }, StringSplitOptions.None)[1]; 
    string basePath = @"X:\Folder\SubFolder"; // Change accordingly... 
    var responseStream = response.GetResponseStream(); 
    using (var fileStream = File.Create(Path.Combine(basePath, fn))) 
    { 
     responseStream.CopyTo(fileStream); 
    } 
} 

Der obige Code bestimmte Methoden und Funktionen verwendet, können Sie weitere Informationen finden Sie hier:


Hoffnung diese Antwort hilft Ihnen :)

+0

hat super funktioniert, thx! –

1

es möglich ist, den Dateinamen zu erhalten, da der Server die Content-Disposition Header sendet. Hier ist ein Codebeispiel, wie den Dateinamen zu erhalten, die HttpClient-Klasse:

var url = "http://findicons.com/icon/download/235456/internet_download/128/png?id=235724"; 

using (var client = new HttpClient()) 
using (var response = await client.GetAsync(url)) 
{ 
    // make sure our request was successful 
    response.EnsureSuccessStatusCode(); 

    // read the filename from the Content-Disposition header 
    var filename = response.Content.Headers.ContentDisposition.FileName; 

    // read the downloaded file data 
    var stream = await response.Content.ReadAsStreamAsync(); 

    // Where you want the file to be saved 
    var destinationFile = Path.Combine("C:\\local\\directory", filename); 

    // write the steam content into a file 
    using (var fileStream = File.Create(destinationFile)) 
    { 
     stream.CopyTo(fileStream); 
    } 
} 
+0

thx, es hat funktioniert! –

+0

@HerrJava froh, dass es Ihr Problem gelöst hat. Vergessen Sie nicht, die Antwort zu aktualisieren und die Antwort als akzeptiert zu markieren, um dieses Thema zu schließen. Viel Spaß beim Programmieren :) – Nasreddine

Verwandte Themen