我想将动态创建的图像发送给我的用户,例如图表,图形等。这些图像是“丢弃”图像,它们只会被发送给一个用户然后被销毁,因此“没有涉及文件” ”
我想将图像直接发送给用户,而不是先将其保存在文件系统中。使用PHP,可以通过将HTML文件中的图像链接到PHP脚本来实现,例如:
编辑:SO吞下了我的图片代码:
<img src="someScript.php?param1=xyz">
然后脚本将正确的标题(filetype =&gt; jpeg等)发送到浏览器并直接将图像写回客户端,而不是暂时将其保存到文件系统。
我怎么能用WSGI应用程序做这样的事情。目前我正在使用Python的内部SimpleWSGI服务器。我知道这个服务器主要用于演示目的而不是实际使用,因为它缺乏多线程功能,所以请不要指出这一点,我知道这一点,现在它满足了我的要求: )
是否真的如将URL放入图像标记并使用WSGI处理请求一样简单,还是有更好的做法?
有没有人有这方面的经验,可以给我一些指示(请不要32位)
谢谢,
汤姆
答案 0 :(得分:8)
它与WSGI或php或任何其他特定的Web技术无关。考虑
<img src="someScript.php?param1=xyz">
一般来说,url someScript.php?param1=xyz
服务器应返回图像类型的数据,并且可以正常工作
考虑这个例子:
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()
此处指向serveImage的任何网址都会返回有效图片,您可以在任何img
标记或可以使用图片的任何其他标记位置使用它。 css或背景图片
可以使用许多第三方库动态生成图像数据,例如PIL等 例如,参见使用python成像库动态生成图像的示例 http://lost-theory.org/python/dynamicimg.html
答案 1 :(得分:2)
YES。它就像在网页中放置网址一样简单。
<img src="url_to_my_application">
你的应用程序只需要使用正确的mimetype返回它,就像在PHP或其他任何东西上一样。最简单的例子:
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]
当然,如果您使用框架/帮助程序库,它可能具有帮助您更容易的辅助函数。
我想补充说,多线程功能在Web服务器上并不是典型的。如果操作正确,则不需要线程就能获得良好的性能。
如果你有一个完善的事件循环,可以在不同的请求之间切换,并以无线程友好的方式编写你的请求处理代码(通过尽可能频繁地将控制权返回给服务器),你甚至可以得到比使用线程更好的性能,因为它们不会使任何运行更快并增加开销。
有关不使用线程的优秀python Web服务器实现,请参阅twisted.web。
答案 2 :(得分:0)
有关使用此技术的精彩示例,请参阅 the BNF railroad diagram WHIFF mini-demo。您可以从WHIFF wsgi工具包下载获取源代码。
答案 3 :(得分:0)
您应该考虑使用并关注ETag标头。它是一个CGI脚本,而不是WSGI,但这些想法是可翻译的:sparklines source - 它总是为相同的参数返回相同的图像,因此它实现了极端的缓存。