2016-07-21 9 views
0

Ich versuche, ein Bild von einer bestimmten Website herunterzuladen.
Eigentlich ist mein Code und für Monate in Produktion, aber es ist nicht in der Lage imagens von dieser speziellen WebsiteC# Code zum Herunterladen eines Bildes von einem "nicht so einfach" CDN

Die Bild-URL I ist dies ein herunterladen muß heruntergeladen werden: (zum Beispiel) http://static7.kabum.com.br/produtos/fotos/64297/64297_index_g.jpg

Die Codes ich bisher versucht:

Methode 1 -> (gescheitert)

string url = "http://static7.kabum.com.br/produtos/fotos/64297/64297_index_g.jpg"; 
var request = (HttpWebRequest)WebRequest.Create(url); 
request.Timeout = (timeout == 0 ? 30 : timeout) * 1000; 
request.KeepAlive = false; 
request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36"; 

var response = (HttpWebResponse)request.GetResponse(); 
if (response.StatusCode == HttpStatusCode.OK) 
{ 
    const int BUFFER_SIZE = 16 * 1024; 
    var buffer = new byte[BUFFER_SIZE]; 

    // if the remote file was found, download it 
    using (Stream inputStream = response.GetResponseStream()) 
    using (Stream outputStream = File.Create(fileName, BUFFER_SIZE)) 
    { 
     int bytesRead; 
     do 
     { 
      bytesRead = inputStream.Read(buffer, 0, buffer.Length); 
      outputStream.Write(buffer, 0, bytesRead); 
     } while (bytesRead != 0); 
    } 
} 

Methode 2 -> (auch nicht)

[..] 
using(Image webImage = Image.FromStream(response.GetResponseStream())) 
{ 
    webImage.Save(fileName); 
} 
[..] 

Beide Methoden versagen mit der folgenden exception

„Parameter nicht gültig“ exception Lade System.Drawing.Image

Stacktrace = "em System.Drawing.Image.FromStream (Stream-Stream, Boolesche VerwendungEmbeddedColdManagement, Boolean validateImageData) in System.Drawing.Image.FromStream (Stream-Stream) in MonitorLib.Helper.RequestPageHelper.RequestDowloadPage (Boolean Proxy, Strin ...

Ich denke, die Bilddaten unvollständig oder verdichtet wird, aber die URL funktioniert auf jedem Browser

irgendwelche Gedanken in Ordnung? vielen Freunden

Antwort

0

können Sie die WebClient.DownloadFile() -Methode verwenden.

var fileName = @"C:\path\to\file.jpg"; 
var url = "http://static7.kabum.com.br/produtos/fotos/64297/64297_index_g.jpg"; 

using (var client = new WebClient()) 
{ 
    client.DownloadFile(url, fileName); 
} 
+0

Das hat funktioniert, danke m8 – user5199217

0

Dies scheint ein Problem mit dem Server zu sein, der mit einem fehlerhaften Header antwortet, den die Browser ignorieren können. Sie müssen Ihre Anwendung dazu auffordern, dasselbe zu tun. Dafür gibt es mehrere Möglichkeiten. The server committed a protocol violation. Section=ResponseHeader Detail=CR must be followed by LF, In WinForms? sollte in der Lage sein, Sie in die richtige Richtung zu führen.

+0

Einverstanden, es ist die Wurzel des Problems in der Tat – user5199217