Asp.net - comment afficher sur son site une image provenant d'une autre adresse url

Contenu du snippet

Dans le cadre des architectures complexes, il arrive très souvant que l'on ait une possibilité de transfert de données (via HTTP) entre deux serveurs (dans une DMZ par exemple) mais que les client connecté sur un serveur ne puissent pas se connecter sur le second (imaginez le cas d'un Intranet invisible des Utilisateurs de l'Extranet).
Je vais donc simplement montrer comment pouvoir afficher une image provenant d'une autre URL (cela peut aussi permettre de na pas montrer à vos utilisateurs d'où vient l'image).
PS: notre exemple est issu de l'utilisation des HTTP Handlers, cf tutorial visible ici :
- http://www.asp-php.net/tutorial/asp.net/httphandlers.php

Source / Exemple :


' -----------------------------------------------------
Imports System.IO
Imports System.Net

' -----------------------------------------------------
Public Class PhotoHandler
 Implements IHttpHandler

 ' -----------------------------------------------------
 Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
 ' A partir du nom de l'image et du type de sortie crée le Flux Binaire 
 ' afin de le fournir à la page 

 Dim URLPhotoBase As String = "http://www.MonServeur.com/MonRepertoireImageSource/"
 Dim nomPhoto As String = Trim(context.Request("NomFichier"))
 Dim nomFichier As String

 If nomPhoto = "" Then
  ' Si aucun nom n'est transmis je prends la photo de base
  nomFichier = URLPhotoBase & "NomImageDeBase.jpg"
 Else
  nomFichier = URLPhotoBase & nomPhoto
 End If

 Dim myRequest As System.Net.HttpWebRequest
 Dim myResponse As System.Net.HttpWebResponse
 Dim s As System.IO.Stream
 Dim buffer(20480) As Byte
 Dim iBytesToRead As Integer
 Dim iBytesRead As Integer
 Dim n As Integer

 myRequest = System.Net.WebRequest.Create(nomFichier)
 myResponse = myRequest.GetResponse()
 context.Response.ContentType = "image/jpeg"
 s = myResponse.GetResponseStream()
 iBytesToRead = myResponse.ContentLength
 iBytesRead = 0

 While iBytesToRead > 0
  ' La Fonctio Read Renvoie 0 ou le nombre d'octets à lire
  n = s.Read(buffer, iBytesRead, iBytesToRead)
  ' La fin du fichier a été atteinte
  If n = 0 Then
   Exit While
  End If
  iBytesRead += n
  iBytesToRead -= n
 End While
 context.Response.BinaryWrite(buffer)
 s.Close()
 myResponse.Close()

End Sub

' -----------------------------------------------------
Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
 Get
  Return True
 End Get
End Property

' -----------------------------------------------------
End Class
' -----------------------------------------------------

Pour appeler cette classe il suffit alors de mettre en source d'un Objet IMG l'adresse qui appelle le Handler :
<IMG SRC='photo.ashx?NomFichier=MonFichierImage'>

Conclusion :


Bon Coding

Romelard Fabrice (Alias F___)

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.