Question

Je souhaite envoyer à mes utilisateurs des images créées dynamiquement, telles que des graphiques, des graphiques, etc. Ces images sont "jetables". images, elles ne seront envoyées qu'à un seul utilisateur, puis détruites, d'où le libellé "Aucun fichier en cause".

Je souhaite envoyer l'image directement à l'utilisateur, sans l'enregistrer au préalable sur le système de fichiers. Avec PHP, vous pouvez associer une image de vos fichiers HTML à un script PHP tel que:

edit: SO a avalé mon tag d'image:

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

Le script a ensuite envoyé les en-têtes appropriés (filetype = & jteg, etc.) au navigateur et a directement écrit l'image sur le client, sans l'enregistrer temporairement dans le système de fichiers.

Comment pourrais-je faire quelque chose comme ceci avec une application WSGI. Actuellement, j'utilise le serveur interne SimpleWSGI de Python. Je suis conscient du fait que ce serveur était principalement destiné à des fins de démonstration et non à une utilisation réelle, car il ne dispose pas de fonctionnalités de multi-threading, veuillez donc ne pas me le signaler, je suis conscient de cela et, pour l'instant, il répond à mes exigences: )

Est-ce vraiment aussi simple que de placer l'URL dans les balises d'image et de traiter la requête avec WSGI, ou existe-t-il une meilleure pratique?

Quelqu'un at-il déjà eu une expérience avec cela et pourrait me donner quelques indications (pas d’affichage 32 bits s'il vous plaît)

Merci,

Tom

Était-ce utile?

La solution

Cela n’est pas lié à WSGI, à php ou à toute autre technologie Web spécifique. considérer

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

en général pour l'URL someScript.php? param1 = xyz le serveur devrait renvoyer des données de type image et cela fonctionnerait

Considérez cet exemple:

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()

ici, toute URL pointant sur serveImage retournera une image valide et vous pourrez l’utiliser dans n’importe quelle balise img ou tout autre emplacement de balise où une image peut être utilisée, par exemple. css ou images de fond

Les données d'images peuvent être générées à la volée à l'aide de nombreuses bibliothèques tierces, par exemple. PIL etc. par exemple, voir des exemples de génération d'images dynamiques à l'aide de la bibliothèque d'imagerie Python http://lost-theory.org/python/dynamicimg.html

Autres conseils

OUI. C’est aussi simple que de mettre l’URL dans la page.

<img src="url_to_my_application">

Et votre application doit simplement la renvoyer avec le type MIME correct, comme pour PHP ou autre. Exemple le plus simple possible:

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]

Bien sûr, si vous utilisez une bibliothèque framework / helper, celle-ci peut avoir des fonctions d'assistance qui vous faciliteront la tâche.

J'aimerais ajouter en commentaire que les fonctionnalités de multi-threading ne sont pas essentielles sur un serveur Web. Si cela est fait correctement, vous n’avez pas besoin de threads pour obtenir de bonnes performances.

Si vous avez une boucle d'événement bien développée qui permute entre différentes requêtes et écrit votre code de traitement des requêtes sans threads (en rendant le contrôle au serveur aussi souvent que possible), vous pouvez obtenir même de meilleures performances qu'avec les threads, car rien ne les rend plus rapides et ne crée pas de surcharge.

Voir twisted.web pour une bonne implémentation de serveur Web python n'utilisant pas de threads .

Pour un exemple sophistiqué utilisant cette technique, veuillez consulter la voie ferrée BNF diagramme mini-démo WHIFF . Vous pouvez obtenir le code source à partir du téléchargement de la boîte à outils WHIFF wsgi.

Vous devriez envisager d'utiliser et de prêter attention aux en-têtes ETag. C'est un script CGI, pas WSGI, mais les idées peuvent être traduites: source de sparklines source - it arrive à toujours retourner la même image pour les mêmes paramètres, de sorte qu'il pratique la mise en cache extrême.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top