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
