Frage

Ich möchte dynamisch erstellte Bilder meiner Benutzer senden, wie Tabellen, Grafiken usw. Diese Bilder werden als „Wegwerf“ Bilder, werden sie nur für einen Benutzer und dann zerstört gesendet werden, damit die „keine Dateien beteiligt “.

Ich mag das Bild senden direkt an den Benutzer, ohne sie zuerst auf dem Dateisystem zu speichern. Mit PHP könnte dies durch die Verknüpfung von einem Bild in Ihren HTML-Dateien in einem PHP-Skript erreicht wird wie zum Beispiel:

edit: SO meinen Image-Tag geschluckt:

<img src="someScript.php?param1=xyz">

Das Skript geschickt dann die richtigen Header (Dateityp => jpeg etc.) an den Browser und schrieb das Bild direkt an den Client zurück, ohne es in dem Dateisystem vorübergehend zu speichern.

Wie kann ich etwas tun, wie dies mit einer WSGI Anwendung. Derzeit bin ich mit internem SimpleWSGI Server Python. Ich bin mir bewusst, dass dieser Server in erster Linie wurde zu Demonstrationszwecken und nicht für die tatsächlichen Einsatz, da es Multi-Threading-Fähigkeiten mangelt, so bitten mir dies nicht darauf hinweisen, ich bin mir bewusst, dass, und jetzt ist es erfüllt meine Anforderungen: )

Ist es wirklich so einfach, wie die URL in die Image-Tags setzen und die Anforderung mit WSGI Handhabung, oder gibt es eine bessere Praxis?

Hat jemand hatte keine Erfahrung mit diesem und konnte ein paar Hinweise geben mir (keine 32Bit diejenigen, bitte)

Danke,

Tom

War es hilfreich?

Lösung

Es ist nicht zu WSGI oder PHP oder eine andere spezifische Web-Technologie. betrachten

<img src="someScript.php?param1=xyz">

im Allgemeinen für url someScript.php?param1=xyz Serverdaten von Bildtyp zurückgeben sollten und es würde funktionieren

Betrachten Sie dieses Beispiel:

from wsgiref.simple_server import make_server

def serveImage(environ, start_response):
    status = '200 OK'
    headers = [('Content-type', 'image/png')]
    start_response(status, headers)

    return open("about.png", "rb").read()

httpd = make_server('', 8000, serveImage)
httpd.serve_forever()

hier jede URL zu serveImage zeigt ein gültiges Bild zurück, und Sie es in jedem img-Tag oder einem anderen Tag Ort, an dem ein Bild verwendet werden können, können zum Beispiel CSS oder Hintergrundbilder

Die Bilddaten können im laufenden Betrieb erzeugt werden unter Verwendung von vielen Bibliotheken von Drittanbietern z.B. PIL etc. siehe z.B Beispiele von Bildern unter Verwendung von dynamisch Python Imaging-Bibliothek zu erzeugen http://lost-theory.org/python/dynamicimg.html

Andere Tipps

JA. Es ist so einfach, wie die URL der Seite setzen.

<img src="url_to_my_application">

Und Ihre Anwendung nur hat sie zurück mit dem korrekten MIME-Typ, so wie auf PHP oder irgendetwas anderes. Einfachstes Beispiel möglich:

def application(environ, start_response):
    data = open('test.jpg', 'rb').read() # simulate entire image on memory
    start_response('200 OK', [('content-type': 'image/jpeg'), 
                              ('content-length', str(len(data)))])
    return [data]

Natürlich, wenn Sie einen Rahmen / Helfer-Bibliothek verwenden, könnte es Hilfsfunktionen, die es leichter machen wird.

Ich mag als Neben Kommentar hinzufügen, dass Multi-Threading-Fähigkeiten sind nicht auf einem Webserver schlechthin. Wenn es richtig gemacht, Sie nicht über Gewinde benötigen eine gute Leistung zu haben.

Wenn Sie ein gut ausgebautes Ereignisschleife, die zwischen verschiedenen Anträgen schaltet, und schreiben Sie Ihre Anfrage Behandlungscode in einer gewindefreundliche Weise (durch die Steuerung an den Server so oft wie möglich zurückkehrt), können Sie sich auch besser Leistung als Threads, da sie Kopf nichts laufen schneller machen und hinzufügen.

Siehe twisted.web für eine gute Python Web-Server-Implementierung, die keine Threads nicht verwendet .

Für ein schickes Beispiel, das diese Technik verwendet, finden Sie unter der BNF Eisenbahn Diagramm WHIFF Mini-Demo . Sie können die Quelle aus dem WHIFF wsgi Toolkit Download.

Sie sollten prüfen, ETAG Headern und Aufmerksamkeit. Es ist ein CGI-Skript, nicht WSGI, aber die Ideen sind übersetzbar: Sparklines Quelle - es geschieht immer das gleiche Bild für die gleichen Parameter zurückgeben, so übt es extremes Caching.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top