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___)
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.