如何用GAE返回图像?

时间:2012-10-23 17:50:32

标签: python google-app-engine

每次用户访问http://www.example.com/some-random-symbols-1x1.png时,我都应该返回透明图像1x1px。我已经根据文件创建了,但是我应该如何在我的代码中读取它以返回给用户?我知道如何从数据存储区或blobstore显示图像。但不知道如何读取和返回二进制文件。

由于以下原因,它不能是静态文件:

  1. url将包含一些随机符号;
  2. 访问网址后,在显示图片之前,我想记录有人访问该文件。

2 个答案:

答案 0 :(得分:3)

1x1透明PNG(或GIF)足够小,您可以直接对base64表示进行硬编码,并通过self.response.write()直接发送(解码后)。

每次从磁盘读取都比较昂贵。如果你想走那条路,懒洋洋地初始化一个全局变量。

答案 1 :(得分:2)

在一个更一般的情况下,我会使用blobstore和BlobstoreDownloadHandler,但是对于一个绝对适合内存的小gif,这样的东西可以读取文件的内容:

with open('path/to/file.gif') as f:
  img_content = f.read()

我把它放在我的处理程序之外,所以每个实例都做了一次。如果您使用的是2.5,那么您将来需要导入'with',或者自己打开和关闭文件。

然后在你的处理程序中,假设webapp2:

self.response.content_type = 'image/gif'
self.response.write(img_content)