在python gae上传和显示图像?

时间:2012-12-31 00:01:35

标签: python google-app-engine google-cloud-datastore

很难在python gae上传和显示图片。

这就是我所做的。 1.在app.yaml文件中,我添加了:

handlers:

- url: /favicon\.ico
  static_files: favicon.ico
  upload: favicon\.ico

- url: /(.*\.(gif|png|jpg))
  static_files: /\1
  upload: (.*\.(gif|png|jpg))

- url: .*
  script: main.app
  1. 然后放下:
  2. in

    def Character(db.Model):
       avatar = db.BlobProperty()
    

    在我的处理程序下:

    if avatar:
      character_info.avatar = db.Blob(images.resize(avatar, 240,360))
       character_key = character_info.put()
    

    我可以在gae admin数据查看器中看到二进制输入,但不确定它是如何调用它的。然后,我将角色对象传递给PageHandler并调用for循环来获取每个角色。

    {% for character in characters %}
    #{{another html page is render here}}
    {% endfor %}
    

    尝试了这些,但它们都没有用。

    <img src="/images?img_id={{character.key()}}"></img>
    <img src="/images/header.jpg"></img>
    <img src="/avatar?avatar_id={{character.key()}}"></img>
    

    所以我的问题是:

    1. 如何确定“/ images”(这是文件夹?)或“img_id”是正确的语法?

    2. 我没有看到任何图片上传到我的localhost,这是正确的吗?

    3. 直接从像<img src="/images/header.jpg"></img>这样的文件夹调用图像不起作用...(在php中它可以正常工作......)

    4. 在此先感谢,任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:3)

静态文件由基础结构提供,而不是由您的应用程序提供。它看起来像你在处理程序定义中有一个错误...它应该看起来更像(注意:上传中没有前导/部分)

- url: /(.*\.(gif$|png$|jpg$))
  static_files: /\1
  upload: (.*\.(gif$|png$|jpg$))

然后任何以gif,png或jpg结尾的网址都将由应用引擎基础架构提供服务器,而不是应用程序处理程序。

答案 1 :(得分:0)

好吧,我弄清楚我做错了是因为我没有添加图像处理程序。

所以

class ImageHandler(Handler):
    def get(self):
        character = db.get(self.request.get('img_id'))
        if character.avatar:
            self.response.headers['Content-Type'] = 'image/png'
            self.response.out.write(character.avatar)
        else:
            self.response.out.write("No image")

这解决了我的问题。