viernes, 9 de diciembre de 2011

ASP.NET - Recuperando imagenes desde carpeta fuera de tu sitio web

block_imageCómo hacemos para mostrar en nuestro sitio web imágenes que están guardadas en carpetas que están fuera de nuestro sitio web? Tienes dos posibilidades:
  1. Conviertes dicha carpeta con imágenes en directorio virtual, y luego accedes a dichas imágenes a través de una url.
  2. Añades un archivo handler, digamos Handler1.ashx, para que a través de él accedas a cada imagen ubicada en dicha carpeta.
Si eligieras la primera opción, tendrías el inconveniente de que si le usuario pone ver el código html de tu página… vería cuál es la ruta de cada imagen y podría acceder a ellas.
La segunda opción, al contrario te brinda muchas ventajas… como es la privacidad de las imágenes: no se menciona dónde están guardadas las imágenes… sólo se puede acceder a ellas a través de este handler…
además si quisieras poner algunas validaciones adicionales antes de despachar la imagen… podrías incluirlas en este handler. Hace algún tiempo escribí algo al respecto, puedes leerlo desde aquí:
http://www.neuronasoft.net/2010/04/aspnet-imagenes-solo-para-usuarios.html
Vamos entonces a demostrar entonces cómo servimos imágenes a través de un handler.ashx:
Primero, tendrás que ponerle a tus controles imagen una ruta como esta:
<asp:Image ID="Image1" ImageUrl="Handler1.ashx?img=banner.png" runat="server" />
Date cuenta que estoy pasando el nombre de la imagen como un querystring.
Luego, el código del handler sería el siguiente:
    Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest

        Dim Path As String = "C:\PrivateImages\"

        Dim img As String = context.Request.QueryString("img")

        context.Response.ContentType = "image/png"

        context.Response.TransmitFile(Path & img)

    End Sub
Como ves, es muy simple, sin embargo nos resuelve muchos contratiempos.
Espero que te sea de utilidad Guiño

4 comentarios:

javichere dijo...
Este comentario ha sido eliminado por el autor.
Segundo Serrano dijo...

Hola javichere,

puedes usar alguno de los convertidores online de código:
http://converter.telerik.com/
http://www.developerfusion.com/tools/convert/vb-to-csharp/
http://www.carlosag.net/tools/codetranslator/

Saludos

Pancho dijo...

Eres grande viejo, esto era lo que buscaba ;)

Unknown dijo...

Excelente!!! Gracias por el aporte.