bild ohne zwischenspeichern an den cherrypy schicken ?

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
nuss
User
Beiträge: 53
Registriert: Donnerstag 28. August 2008, 11:36

bild ohne zwischenspeichern an den cherrypy schicken ?

Beitragvon nuss » Donnerstag 19. März 2009, 16:35

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 ;)
BlackJack

Beitragvon BlackJack » Donnerstag 19. März 2009, 16:51

@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_)
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Re: bild ohne zwischenspeichern an den cherrypy schicken ?

Beitragvon gerold » Donnerstag 19. März 2009, 17:38

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
BlackJack

Beitragvon BlackJack » Donnerstag 19. März 2009, 18:12

@gerold: Wozu ist das `StringIO` hier notwendig!?
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Donnerstag 19. März 2009, 18:48

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.

.
http://halvar.at | Kleiner Bascom AVR Kurs

Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
nuss
User
Beiträge: 53
Registriert: Donnerstag 28. August 2008, 11:36

Beitragvon nuss » Donnerstag 19. März 2009, 20:35

@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

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder