2016-07-21 1 views
0

En essayant de télécharger une image à partir d'un site web spécifique.
En fait, mon code est en cours d'exécution dans la production pendant des mois, mais ce n'est pas en mesure de télécharger imagens de ce site spécifiqueC# Code pour télécharger une image à partir d'un CDN "pas si facile"

L'URL de l'image que je dois télécharger est celui-ci: (par exemple) http://static7.kabum.com.br/produtos/fotos/64297/64297_index_g.jpg

Les codes que j'essayées jusqu'à présent:

Méthode 1 -> (échec)

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); 
    } 
} 

Méthode 2 -> (également échoué)

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

Les deux méthodes échouent avec les éléments suivants exception

« Paramètre non valide » exception chargement System.Drawing.Image

StackTrace = "em System.Drawing.Image.FromStream (Flux de flux, Booléen useEmbeddedColorManagement, Boolean validateImageData) dans System.Drawing.Image.FromStream (Flux de flux) dans MonitorLib.Helper.RequestPageHelper.RequestDowloadPage (proxy booléenne, Strin ...

Je suppose que les données d'image est incomplète ou compactée, mais l'URL fonctionne très bien sur un navigateur

toute pensée? merci beaucoup amis

Répondre

0

vous pouvez utiliser la méthode WebClient.DownloadFile().

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

Cela a fonctionné, merci m8 – user5199217

0

Cela semble être un problème avec le serveur qui répond avec un en-tête incorrect que les navigateurs peuvent ignorer et dépasser. Vous devez dire à votre application de faire la même chose. Il y a plusieurs options pour le faire. The server committed a protocol violation. Section=ResponseHeader Detail=CR must be followed by LF, In WinForms? devrait être en mesure de vous guider dans la bonne direction.

+0

D'accord, c'est la racine du problème en effet – user5199217