none
Duda mostrar imagenes en ASP.NET C# RRS feed

  • Pregunta

  • Hola, trabajo en ASP.NET utilizando C# y SQL Server, estoy creando un registro de empleados en el que mostrare la información referente al empleado como su nombre, cargo, salario, DUI laboral, jefe, fecha de ingreso, ausencias...y una foto de la cara del empleado para un registro mas completo.

    Se como guardar una imagen ya sea en una carpeta o en la base de datos, nos decantamos por la base de datos así que guarde la imagen en un tipo VarBinary(MAX) y además guarde en esa misma tabla la demás información del empleado, mi duda viene cuando cree el buscador de registros de empleados, pues revisando en internet me encontré con que hay dos maneras de recuperar la imagen: ya sea pagina.aspx o bien utilizando un handler(.ashx o .cs), las dos maneras las probé y me han funcionado pero mi pregunta es: debo utilizar una pagina aspx o un handler solo para recuperar la imagen y por otro método recuperar la información del empleado? es como tener dos archivos aspx(o handler) uno para la imagen y otro para la demás información? no puedo hacerlo solo en uno?

    me base en este ejemplo en internet: http://ltuttini.blogspot.com/2010/03/aspnet-guardar-imagen-base-de-datos.html



    pabletoreto

    martes, 1 de diciembre de 2015 14:26

Respuestas

  • Es el funcionamiento normal a la hora de mostrar una página web:

    El navegador realiza una petición para descargar el contenido de la página y el servidor le devuelve el código html de la página.

    A partir de ahí el navegador va haciendo diferentes peticiones para descargar los diferentes elementos que necesita la página: imágenes, archivos javascript, hojas de estilos, etc.

    La descarga del código html y de la imagen se realiza en dos peticiones diferentes de ahí que tengas que gestionarlo por separado.

    Se puede incluir la imagen embebida en el código html con el contenido codificado en Base64 pero creo que no te aportaría gran cosa y ralentizaría la carga inicial de la página.


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    • Marcado como respuesta pabletoreto martes, 1 de diciembre de 2015 17:21
    martes, 1 de diciembre de 2015 14:36
  • >>debo utilizar una pagina aspx o un handler solo para recuperar la imagen y por otro método recuperar la información del empleado?

    exacto, la imagen la recueras usando un handler ya que requieres que el array de byte de la misma sea enviado en el Response definiendo el contectType del mismo

    en cambio los datos del empleado puedes recuerarlos directamente tomando los datos simple y asignarlos a los controles

    aqui

    [ASP.NET] GridView – Edición Empleados

    un ejemplo de esto que comento

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta pabletoreto martes, 1 de diciembre de 2015 17:21
    martes, 1 de diciembre de 2015 15:50

Todas las respuestas

  • Es el funcionamiento normal a la hora de mostrar una página web:

    El navegador realiza una petición para descargar el contenido de la página y el servidor le devuelve el código html de la página.

    A partir de ahí el navegador va haciendo diferentes peticiones para descargar los diferentes elementos que necesita la página: imágenes, archivos javascript, hojas de estilos, etc.

    La descarga del código html y de la imagen se realiza en dos peticiones diferentes de ahí que tengas que gestionarlo por separado.

    Se puede incluir la imagen embebida en el código html con el contenido codificado en Base64 pero creo que no te aportaría gran cosa y ralentizaría la carga inicial de la página.


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    • Marcado como respuesta pabletoreto martes, 1 de diciembre de 2015 17:21
    martes, 1 de diciembre de 2015 14:36
  • Es el funcionamiento normal a la hora de mostrar una página web:

    El navegador realiza una petición para descargar el contenido de la página y el servidor le devuelve el código html de la página.

    A partir de ahí el navegador va haciendo diferentes peticiones para descargar los diferentes elementos que necesita la página: imágenes, archivos javascript, hojas de estilos, etc.

    La descarga del código html y de la imagen se realiza en dos peticiones diferentes de ahí que tengas que gestionarlo por separado.

    Se puede incluir la imagen embebida en el código html con el contenido codificado en Base64 pero creo que no te aportaría gran cosa y ralentizaría la carga inicial de la página.


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    Gracias,  aprovecho tu ayuda y por favor ayudame con unas preguntas: debería tener alguna preferencia por el archivo que entregue la imagen a mi pagina? es decir, hay ventajas o presenta menos trabajo cargar un aspx o un handler(sea un .ashx o .cs)?

    y una ultima, las dos lineas de codigo abajo hacen lo mismo verdad?

    <img alt="" src="<%# Eval("Id", "Image.ashx?id={0}") %>"

    <img alt="" src="Image.ashx?id=<%# Eval("Id")%>"


    pabletoreto

    martes, 1 de diciembre de 2015 14:46
  • En cuanto a rendimiento será similar.

    Yo no utilizaría un aspx por separar de forma clara lo que es un WebForm y lo que es un Handler para servir imágenes.

    Tampoco usaría ashx porque están en desuso. Si te animas te aconsejaría echarle un vistazo a Web API.

    Si no te animas a incluir Web API, o simplemente no quieres incluir una nueva tecnología simplemente para esto, puedes crearte una clase HttpHandler para gestionar las peticiones.


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    martes, 1 de diciembre de 2015 15:30
  • >>debo utilizar una pagina aspx o un handler solo para recuperar la imagen y por otro método recuperar la información del empleado?

    exacto, la imagen la recueras usando un handler ya que requieres que el array de byte de la misma sea enviado en el Response definiendo el contectType del mismo

    en cambio los datos del empleado puedes recuerarlos directamente tomando los datos simple y asignarlos a los controles

    aqui

    [ASP.NET] GridView – Edición Empleados

    un ejemplo de esto que comento

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta pabletoreto martes, 1 de diciembre de 2015 17:21
    martes, 1 de diciembre de 2015 15:50
  • hola Asier

    >>Tampoco usaría ashx porque están en desuso

    porque esta en desuso ?

    he visto implementaciones aun en asp.net mvc que hacen uso de handler

    quizas la extendion ashx no se use, pero los handler como concepto si

    >>puedes crearte una clase HttpHandler para gestionar las peticiones.

    pero eso no seria justamente implementar el ashx ?

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 1 de diciembre de 2015 15:54
  • >>debo utilizar una pagina aspx o un handler solo para recuperar la imagen y por otro método recuperar la información del empleado?

    exacto, la imagen la recueras usando un handler ya que requieres que el array de byte de la misma sea enviado en el Response definiendo el contectType del mismo

    en cambio los datos del empleado puedes recuerarlos directamente tomando los datos simple y asignarlos a los controles

    aqui

    [ASP.NET] GridView – Edición Empleados

    un ejemplo de esto que comento

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    Gracias, aprovecha que esta linea de codigo la encontré en post de tu autoria para preguntarte sobre una linea de codigo, es ta linea que utilizas: 

    <img alt="" src="<%# Eval("Id", "Image.ashx?id={0}") %>" 
    
    

    es lo mismo a utilizar 

    <img src="Image.ashx?id=<%# Eval("Id")%>"
    fuente: http://ltuttini.blogspot.com/2010/03/aspnet-guardar-imagen-base-de-datos.html 


    pabletoreto

    martes, 1 de diciembre de 2015 16:35
  • Hola Leandro,

    a lo que me refería que está en desuso es el implementar los HttpHandler en archivos ashx. Igual he sido muy atrevido, pero la verdad es que yo hace tiempo que no he visto desarrollos nuevos con ashx.

    También conozco algún caso de proyecto asp.net mvc que los utiliza para se trata de un antiguo proyecto web forms que se ha migrado a mvc y se han mantenido los ashx.

    Y a lo que me refería con la opción de crearse una clase HttpHandler para gestionar las peticiones, es a crear una clase dentro de una librería y configurarla en el config para que gestione las peticiones en función de la ruta.

    La verdad es que últimamente todos los nuevos desarrollos que he visto están implementados así o en Web API.

    Pero tienes razón: no me he explicado demasiado bien y he dado por hecho que los archivos ashx no se utilizan simplemente porque yo no me he encontrado casos recientes.


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    martes, 1 de diciembre de 2015 16:51
  • >>a lo que me refería que está en desuso es el implementar los HttpHandler en archivos ashx.

    archivos ? pero si el ashx es solo una extesnion que uno define en el config para registrar el handler

    >>La verdad es que últimamente todos los nuevos desarrollos que he visto están implementados así o en Web API.

    si eso es verdad, se podria decir que casi todo se puede exponer mediente web api


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 1 de diciembre de 2015 16:55
  • >>es ta linea que utilizas: es lo mismo a utilizar

    claro es el equivalente, la primer linea esta en un contexto dentro de un GridView por eso el Eval()

    pero si es una imagen simple que esta a nivel de la pagina en ese caso usar de src directo con la url asl ashx

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 1 de diciembre de 2015 16:57