none
Imagenes desde base de datos RRS feed

  • Pregunta

  • Buenas a todos... estoy peleando con una base de datos, que me la mandaron con un campo de tipo image y viene lleno con un array de byte[]... me lo traigo a mi cs pero no se como hacer para convertirlo en una imagen otra vez, es decir convertir una asp:Image con el arreglo de byte...

    les agradezco mucho su colaboracion


    graaciasssss
    viernes, 11 de septiembre de 2009 23:32

Respuestas

  • Con el siguiente codigo deberia de poder convertir tu array de bytes en un archivo fisico

    FileStream fs = new FileStream(NombreDeArchivo, FileMode.Create, FileAccess.ReadWrite);
    BinaryWriter bw = new BinaryWriter(fs);
    bw.Write(MiArrayBytes);
    bw.Close(); 

    Saludos

    Alexander Díaz Fernandez (Ingeniero de Sistemas-Madrid)
    •Microsoft Certified Professional Developer Web Developer
    •Microsoft Certified Technology Specialist Distributed Applications
    •Microsoft Certified Technology Specialist Web Applications
    •Microsoft Certified Technology Specialist Application Development Foundation c#
    •Microsoft Certified Technology Specialist SQL Server 2005
    •Microsoft Desarrollador 5 estrellas – Gold - Platiniun
    Blog: http://highscalability.wordpress.com
    • Marcado como respuesta DiegoSanabria sábado, 12 de septiembre de 2009 14:36
    sábado, 12 de septiembre de 2009 11:10
  • Hola DiegoSanabria,

    si estás desarrollando una aplicación ASP.NET, con el array de bytes que te devuelve la base de datos, es necesario que crees y guardes un archivo de imagen (jpg,png,etc..). Eso lo puedes hacer tal y como te explica Alexander. Una vez tengas el archivo físico creado, entonces en tu control Image sólo debes especificar la Url en la que se encuentra el archivo que acabas de crear. Es decir, si tu guardas el array de bytes en un archivo llamado \Img\miimagen1.jpg luego colocas el path relativo a esa imagen a tu control Image --> <asp:Image src="~/Img/miimagen1.jpg" ...>"

    Esto debes hacerlo así porque, cuando ejecutas tu aplicación en un navegador, el cliente hará una petición al servidor por cada una de las imagenes que encuentre. Esta petición no la procesará ASP.NET, sino IIS. Y IIS necesita saber exactamente la ruta en la que se encuentra la imagen que debe devolver (va al systema de archivo, busca la imagen indicada en la petición y la devuelve).

    Otra opción es obligar a ASP.NET a procesar las peticiones por imagenes. Eso se consigue con HTTPHandlers. Es un poco más complejo, pero te evitaría tener que guardar todos los archivos de imagenes en disco (cuando ya los tienes guardados en la base de datos)..


    En caso de que la respuesta te sirva, porfavor, márcala como válida

    Muchas gracias y suerte!


    Javier Jiménez Roda


    MCP (Microsoft Certified Professional)
    MCTS (Microsoft Certified Technology Specialist)
    MCPD (Microsoft Certified Professional Developer)
    Blog: http://jimenezroda.wordpress.com

    • Marcado como respuesta DiegoSanabria sábado, 12 de septiembre de 2009 14:36
    sábado, 12 de septiembre de 2009 14:00
  • Hola alexander... gracias asi era como lo necesitaba, lo que pasaba es que los necesitaba halar desde un control repeater o un gridview... anoche estube investigando y llegue a la siguiente solucion para cualquiera que le pase este problema:

    dentro de mi gridview hice lo siguiente
                  <Columns>
                    <asp:ImageField DataImageUrlField="ProCodigo" DataImageUrlFormatString="Imagen.aspx?codImg={0}">
                    </asp:ImageField>
                </Columns>

    donde Imagen.aspx me atiende la conversion de byte[] a image y codImg es el id de la imagen...... si necesitan cualquier info extra solo diganme

    Alexander y Javier...... muchas gracias por la ayudaaaaaaa
    • Marcado como respuesta DiegoSanabria sábado, 12 de septiembre de 2009 14:36
    sábado, 12 de septiembre de 2009 14:35

Todas las respuestas

  • Con el siguiente codigo deberia de poder convertir tu array de bytes en un archivo fisico

    FileStream fs = new FileStream(NombreDeArchivo, FileMode.Create, FileAccess.ReadWrite);
    BinaryWriter bw = new BinaryWriter(fs);
    bw.Write(MiArrayBytes);
    bw.Close(); 

    Saludos

    Alexander Díaz Fernandez (Ingeniero de Sistemas-Madrid)
    •Microsoft Certified Professional Developer Web Developer
    •Microsoft Certified Technology Specialist Distributed Applications
    •Microsoft Certified Technology Specialist Web Applications
    •Microsoft Certified Technology Specialist Application Development Foundation c#
    •Microsoft Certified Technology Specialist SQL Server 2005
    •Microsoft Desarrollador 5 estrellas – Gold - Platiniun
    Blog: http://highscalability.wordpress.com
    • Marcado como respuesta DiegoSanabria sábado, 12 de septiembre de 2009 14:36
    sábado, 12 de septiembre de 2009 11:10
  • Hola DiegoSanabria,

    si estás desarrollando una aplicación ASP.NET, con el array de bytes que te devuelve la base de datos, es necesario que crees y guardes un archivo de imagen (jpg,png,etc..). Eso lo puedes hacer tal y como te explica Alexander. Una vez tengas el archivo físico creado, entonces en tu control Image sólo debes especificar la Url en la que se encuentra el archivo que acabas de crear. Es decir, si tu guardas el array de bytes en un archivo llamado \Img\miimagen1.jpg luego colocas el path relativo a esa imagen a tu control Image --> <asp:Image src="~/Img/miimagen1.jpg" ...>"

    Esto debes hacerlo así porque, cuando ejecutas tu aplicación en un navegador, el cliente hará una petición al servidor por cada una de las imagenes que encuentre. Esta petición no la procesará ASP.NET, sino IIS. Y IIS necesita saber exactamente la ruta en la que se encuentra la imagen que debe devolver (va al systema de archivo, busca la imagen indicada en la petición y la devuelve).

    Otra opción es obligar a ASP.NET a procesar las peticiones por imagenes. Eso se consigue con HTTPHandlers. Es un poco más complejo, pero te evitaría tener que guardar todos los archivos de imagenes en disco (cuando ya los tienes guardados en la base de datos)..


    En caso de que la respuesta te sirva, porfavor, márcala como válida

    Muchas gracias y suerte!


    Javier Jiménez Roda


    MCP (Microsoft Certified Professional)
    MCTS (Microsoft Certified Technology Specialist)
    MCPD (Microsoft Certified Professional Developer)
    Blog: http://jimenezroda.wordpress.com

    • Marcado como respuesta DiegoSanabria sábado, 12 de septiembre de 2009 14:36
    sábado, 12 de septiembre de 2009 14:00
  • Hola alexander... gracias asi era como lo necesitaba, lo que pasaba es que los necesitaba halar desde un control repeater o un gridview... anoche estube investigando y llegue a la siguiente solucion para cualquiera que le pase este problema:

    dentro de mi gridview hice lo siguiente
                  <Columns>
                    <asp:ImageField DataImageUrlField="ProCodigo" DataImageUrlFormatString="Imagen.aspx?codImg={0}">
                    </asp:ImageField>
                </Columns>

    donde Imagen.aspx me atiende la conversion de byte[] a image y codImg es el id de la imagen...... si necesitan cualquier info extra solo diganme

    Alexander y Javier...... muchas gracias por la ayudaaaaaaa
    • Marcado como respuesta DiegoSanabria sábado, 12 de septiembre de 2009 14:36
    sábado, 12 de septiembre de 2009 14:35