Python 如何使用GAE返回图像?

Python 如何使用GAE返回图像?,python,google-app-engine,Python,Google App Engine,每次用户访问时,我都应该返回透明图像1x1px。我已经创建了相应的文件,但是我应该如何在代码中读取它以返回给用户呢?我知道如何显示数据存储或blobstore中的图像。但不知道如何读取和返回二进制文件 由于以下原因,它不能是静态文件: url将包含一些随机符号 一旦访问了url,在显示图像之前,我想记录有人访问了该文件 在更一般的情况下,我会使用blobstore和,但是对于一个肯定能放入内存的小gif,像这样的东西来读取文件的内容: with open('path/to/file.gif')

每次用户访问时,我都应该返回透明图像1x1px。我已经创建了相应的文件,但是我应该如何在代码中读取它以返回给用户呢?我知道如何显示数据存储或blobstore中的图像。但不知道如何读取和返回二进制文件

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

  • url将包含一些随机符号
  • 一旦访问了url,在显示图像之前,我想记录有人访问了该文件

  • 在更一般的情况下,我会使用blobstore和,但是对于一个肯定能放入内存的小gif,像这样的东西来读取文件的内容:

    with open('path/to/file.gif') as f:
      img_content = f.read()
    
    我把它放在我的处理程序之外,所以每个实例都做一次。如果您使用的是2.5,那么您需要从future导入“with”,或者自己打开和关闭该文件

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

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

    在更一般的情况下,我会使用blobstore和,但是对于一个肯定能放入内存的小gif,像这样的东西来读取文件的内容:

    with open('path/to/file.gif') as f:
      img_content = f.read()
    
    我把它放在我的处理程序之外,所以每个实例都做一次。如果您使用的是2.5,那么您需要从future导入“with”,或者自己打开和关闭该文件

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

    self.response.content_type = 'image/gif'
    self.response.write(img_content)
    
    1x1透明PNG(或GIF)足够小,您可以直接对base64表示进行硬编码,并通过
    self.response.write()
    (解码后)直接发出它

    每次从磁盘读取都相对昂贵。如果您想这样做,可以惰性地初始化一个全局变量。

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


    每次从磁盘读取都相对昂贵。如果你想走这条路,可以懒洋洋地初始化一个全局变量。

    它可以是静态的。您可以使用一个处理程序为与给定正则表达式匹配的任何URL提供该图像,并且服务器已经记录了对静态文件的访问。谢谢,@Wooble。好的,我知道了。但日志不是我需要的。我想用文件被访问的标志更新数据存储记录。我想我不能使用静态文件。你可以运行一个cron作业并检查日志是否被访问。@bossylobster,你认为这是正确的方法吗?;)我认为服务静态文件是正确的方法,任何次要的关注点都可以异步完成,可以是静态的。您可以使用一个处理程序为与给定正则表达式匹配的任何URL提供该图像,并且服务器已经记录了对静态文件的访问。谢谢,@Wooble。好的,我知道了。但日志不是我需要的。我想用文件被访问的标志更新数据存储记录。我想我不能使用静态文件。你可以运行一个cron作业并检查日志是否被访问。@bossylobster,你认为这是正确的方法吗?;)我认为服务静态文件是正确的方法,任何次要的关注点都可以异步完成。Greg,这在开发环境中运行良好,但在生产环境中不起作用-我得到了
    :[Errno 2]没有这样的文件或目录:“templates/img/1x1.gif”
    。知道如何修复吗?模板/img是否与您的静态路由匹配?与“upload:”行匹配的目录中的文件不会部署到应用服务器(python运行的地方)。Greg,这在开发环境中运行良好,但在生产环境中不起作用-我得到
    :[Errno 2]没有这样的文件或目录:“templates/img/1x1.gif”
    。知道如何修复吗?模板/img是否与您的静态路由匹配?目录中与“upload:”行匹配的文件不会部署到应用服务器(python运行的地方)。谢谢!根据我的经验,我已经知道怎么做了。谢谢!根据我的经验,我已经找到了做这件事的方法。