我想要做的是让我的 Pylons 应用程序根据一些数据动态生成图像,并以可以在浏览器中查看的方式返回它。
到目前为止,我正在生成这样的图像:
import Image, ImageDraw
image = Image.new("RGB", (width, height),"black")
img_out = ImageDraw.Draw(image)
img_out.polygon(...
img_out.text(...
#etc
图像生成成功,甚至可以像这样保存到文件中:
img_out.save(filepath)
我的问题是我没有尝试将它写入磁盘,而是通过 Pylons 响应返回它。根据另一个问题的答案,我能够做到这一点:
import FileApp
my_headers = [('Content-Disposition', 'attachment; filename=\"' + user_filename + '\"'), ('Content-Type', 'text/plain')]
file_app = FileApp(filepath, headers=my_headers)
return file_app(request.environ, self.start_reponse)
使用此解决方案,我可以获取保存在服务器端的 png 并将其返回给用户以供下载。不过,这里有两个问题。首先是我被迫将文件写入磁盘,然后从磁盘提供它,而不是直接使用代码中的图像。第二个是它实际上是在返回文件,因此用户被迫下载它而不是在浏览器中查看它。
我想要的是让用户能够在他们的浏览器中查看文件,而不是自己下载。理想情况下,我也不必将图像保存到服务器端的磁盘上,但我意识到如果没有它存在于服务器或客户端的计算机上,它可能无法提供它。
所以我的问题是这个。我可以直接从代码中提供图像,以便用户在浏览器中简单地看到图像作为对他们请求的响应吗?如果没有,我可以将图像保存到磁盘服务器端并从那里提供它,以便用户将在他们的浏览器中看到图像并且不会被提示下载文件?
(值得我使用 Python 2.6.2 和 PasteScript 1.7.4.2)