Seite 1 von 1

bild ohne zwischenspeichern an den cherrypy schicken ?

Verfasst: Donnerstag 19. März 2009, 16:35
von nuss
Hi, ich möchte eine bilddatei die nur als Buffer oder string vorliegt, direkt
an cherrypy weitergeben, so dass das Bild unter einem angegebenen
pfad/bildernamen zu finden ist, und z.b. durch ein <img src="img.jpg">
in die Seite eingebunden werden kann.

mein erster gedanke war etwas wie dashier:

Code: Alles auswählen

class Page(object):
    def __init__(self, buffer, name):
        self.buffer = buffer
        exec("self."+name+"="+buffer)
        exec("self."name+".exposed=True")
was aber natürlich leider nicht gehen kann,
weil bildernamen immer eine endung mit .xxx haben
Ich kenn mich mit cherrypy noch nicht wirklich aus,
daher wär es nett, wenn mir jemand einen kleinen Anstoß geben könnte ;)

Verfasst: Donnerstag 19. März 2009, 16:51
von BlackJack
@nuss: Die Frage kann ich nicht beantworten, aber Dich bitten nicht mit ``exec`` (oder auch `eval`) herum zu spielen, wenn das nicht nötig ist (ungetestet):

Code: Alles auswählen

class Page(object): 
    def __init__(self, buffer_, name): 
        self.buffer_ = buffer_
        setattr(buffer_, 'exposed', True)
        setattr(self, name, buffer_)

Re: bild ohne zwischenspeichern an den cherrypy schicken ?

Verfasst: Donnerstag 19. März 2009, 17:38
von gerold
nuss hat geschrieben:Hi, ich möchte eine bilddatei die nur als Buffer oder string vorliegt, direkt an cherrypy weitergeben, so dass das Bild unter einem angegebenen pfad/bildernamen zu finden ist, und z.b. durch ein <img src="img.jpg">
in die Seite eingebunden werden kann.
Hallo nuss!

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-

import cherrypy
from cStringIO import StringIO


class Root(object):
    
    def __init__(self):
        img_file = file("image.jpg", "rb")
        self.img_stream = StringIO(img_file.read())
        self.img_len = img_file.tell()
        img_file.close()
    
    
    def default(self, *args, **kwargs):
        #path = "/" + "/".join(args)
        path = cherrypy.request.path_info
        if path == "/image.jpg":
            cherrypy.response.headers["Content-Type"] = "image/jpeg"
            cherrypy.response.headers["Content-Length"] = self.img_len
            return self.img_stream.getvalue()
        raise cherrypy.NotFound(path)
    default.exposed = True


def main():
    cherrypy.quickstart(Root())


if __name__ == "__main__":
    main()
mfg
Gerold
:-)

Verfasst: Donnerstag 19. März 2009, 18:12
von BlackJack
@gerold: Wozu ist das `StringIO` hier notwendig!?

Verfasst: Donnerstag 19. März 2009, 18:48
von gerold
BlackJack hat geschrieben:@gerold: Wozu ist das `StringIO` hier notwendig!?
Hallo BlackJack!

Nuss schrieb "Hi, ich möchte eine bilddatei die nur als Buffer oder string vorliegt,...".
Deshalb simuliere ich das im Beispiel mit StringIO. Ansonsten gibt es keinen Grund dafür. Vielleicht habe ich es damit etwas übertrieben. Man hätte es auch weglassen können. Siehe: http://paste.pocoo.org/show/108694/

lg
Gerold
:-)

PS: Wenn die Bilder auf der Festplatte liegen, würde man in CherryPy ``tools.staticfile`` verwenden.

.

Verfasst: Donnerstag 19. März 2009, 20:35
von nuss
@blackjack: ja ich weiß eval ist eval und setattr ist in der tat um einiges
schöner, war mir aber bisher unbekannt. thx ;)

@gerold: vielen lieben Dank, dass ist so ziemlich genau dass, was ich gesucht habe, hatte heute leider noch keine Zeit das auszuprobieren,
werd's mir aber auf jedenfall noch genau angucken :D