Mostrar imagen desde servlet. [ antes: Guardar y recuperar imagen desde Postgres ]

Marcos Alcazar marcos.alcazar en gmail.com
Lun Feb 11 20:52:46 CET 2008


Antes que nada, gracias por todos los que se esforzaron en tratar de
solucionar mi problema.
El problema era el siguiente: ya habia guardado imagenes en una base
de datos postgres, las cuales queria mostrarlas en pantalla luego.

Voy a mostrar la solucion que encontre... Era mas facil de lo que
pensaba... estaba ahi, solo que no podia verla.

Esta es mi clase "imagen". Hereda de Page, por lo tanto puedo
sobreescribir los metodos de esa clase. Sobreescribo writeHTML(). Mi
problema era que sobreescribia writeContent(), con lo que no me
andaba...

###########
from WebKit.Page import Page
from sqlalchemy import *
from sqlalchemy.orm import *

class ObjetoGrande(object):
    pass

class imagen(Page):

    def actions(self):
        return Page.actions(self) + ["contenido"]

    def writeHTML(self):
        data = self.recuperoImagen()
        res = self.response()
        wr = self.write
        res.setHeader("Content-type", "image/jpeg")
        wr(data)
        res.flush()

    def recuperoImagen(self):
        clear_mappers()
        metadata = MetaData()

        objetoGrande = Table('objeto_grande' , metadata ,
                             Column('id' , Integer , primary_key=True),
                             Column('nombre' , String() , nullable=False),
                             Column('data' , BLOB , nullable=False)
                             )
        mapper(ObjetoGrande,objetoGrande)

        engine =
create_engine('postgres://postgres:postgres@localhost:5432/marcos' )
        Session = sessionmaker(bind=engine, autoflush=True, transactional=True )
        session = Session()

        obj = session.query(ObjetoGrande).first()

        return obj.data

##Y mi pagina quedo de esta forma... tan simple...
<html>
<head>
</head>
<body>
hola
<img src="imagen" >
chau
</body>
</html>

Y eso es todo.
Ahora una pregunta... en el metodo writeHTML, si hago
self.write(data), funciona, al igual que si hago res.write(str(data)).
Es porque write() de Page utiliza el write() del response? Es una
inquietud que me ha quedado, simple curiosidad.

Saludos
Marcos Alcazar
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes





Más información sobre la lista de distribución Python-es