Telechargement fichier distant

Telechargement fichier distant - C#/.NET managed - Programmation

Marsh Posté le 24-11-2008 à 09:20:16    

Bonjour à tous,
 
Je viens de terminer un site internet de commande d'impression de posters pour ma boîte, et partenariat avec un grand site mondial (je tairais le nom pour l'instant).
 
Depuis le site partenaire, les gens cliquent sur une image et ont un lien "obtenir un poster de cette image".
 
De notre coté, le site que j'ai fait reçoit une URL en post, et je télécharge l'image via une fonction .net avec webrequest et webresponse.
 
Tous les formats d'image fonctionnent, sauf un : le SVG. Normal, ce n'est pas vraiment un format d'image, c'est du XML qui rend du vectoriel.
Le problème et que je n'arrive pas à télécharger ce svg distant.
 
Je vais coller le code de ce que j'ai tenté, mais le fichier que je télécharge fait 0 Ko.
 

Code :
  1. Shared Function EnregistreImage(ByVal URLImage As String, ByVal CheminDestImage As String) As String
  2.         Dim myRequest As System.Net.HttpWebRequest
  3.         Dim myResponse As System.Net.HttpWebResponse
  4.         Dim s As System.IO.Stream
  5.         Dim graphicTemp As System.Drawing.Graphics
  6.         Dim ImageSource As System.Drawing.Image
  7.         myRequest = System.Net.WebRequest.Create(URLImage)
  8.         myResponse = myRequest.GetResponse()
  9.         If myResponse.ContentType = "image/gif" Then
  10.             Return myResponse.ContentType
  11.         End If
  12.         s = myResponse.GetResponseStream()
  13.         Select Case Right(URLImage, 4)
  14.             Case ".svg", ".SVG"
  15.                 'CAS DU SVG -> NE MARCHE PAS
  16.                 Using outputStream As FileStream = New FileStream(CheminDestImage, FileMode.Create, FileAccess.Write)
  17.                     Dim cnt As Integer = 0
  18.                     Const LEN As Integer = 4096
  19.                     Dim buffer(LEN) As Byte
  20.                     While ((cnt = s.Read(buffer, 0, LEN)) <> 0)
  21.                         outputStream.Write(buffer, 0, cnt)
  22.                     End While
  23.                     outputStream.Close()
  24.                 End Using
  25.             Case Else
  26.                 ImageSource = System.Drawing.Image.FromStream(s)
  27.                 graphicTemp = System.Drawing.Graphics.FromImage(ImageSource)
  28.                 graphicTemp.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceOver
  29.                 graphicTemp.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality
  30.                 graphicTemp.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality
  31.                 graphicTemp.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic
  32.                 graphicTemp.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality
  33.                 graphicTemp.DrawImage(ImageSource, 0, 0, ImageSource.Size.Width, ImageSource.Size.Height)
  34.                 graphicTemp.Dispose()
  35.                 ImageSource.Save(CheminDestImage, System.Drawing.Imaging.ImageFormat.Jpeg)
  36.                 ImageSource.Dispose()
  37.         End Select
  38.         s.Close()
  39.         myResponse.Close()
  40.         Return myRequest.ContentType
  41.     End Function


 
Voilà, si quelqu'un pouvait me dire ce qui coince dans mon code, et pourquoi le fichier ne s'écrit pas, ca débloquerait une situation...
 
Merci d'avance.

Reply

Marsh Posté le 24-11-2008 à 09:20:16   

Reply

Marsh Posté le 24-11-2008 à 10:21:28    

un ptit up, si quelqu'un a une idée...

Reply

Marsh Posté le 24-11-2008 à 13:22:11    

Bon, ben j'ai fini par trouver, voilà ce qu'il fallait faire (si jamais yen a qui cherchent la réponse) :  
 
           

Code :
  1. Case ".svg", ".SVG"
  2.                 Dim myStreamReader As StreamReader = New StreamReader(s)
  3.                 Dim strHTML As String = myStreamReader.ReadToEnd
  4.                 Dim sWrite As New StreamWriter(CheminDestImage)
  5.                 sWrite.Write(strHTML)
  6.                 sWrite.Close()

Reply

Marsh Posté le 28-11-2008 à 13:16:59    

Attention avec la méthode ReadToEnd: elle va lire le contenu intégral du fichier, le stocker dans une chaine.
Pour de gros fichiers, ce n'est pas une bonne solution car elle pourrait faire planter ton serveur.
La lecture par bloc est en général conseillée.


---------------
Distributeurs automatiques à proximité | Jupiteo - Création et optimisation d'application web
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed