很难在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
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>
所以我的问题是:
如何确定“/ images”(这是文件夹?)或“img_id”是正确的语法?
我没有看到任何图片上传到我的localhost,这是正确的吗?
直接从像<img src="/images/header.jpg"></img>
这样的文件夹调用图像不起作用...(在php中它可以正常工作......)
在此先感谢,任何帮助将不胜感激!
答案 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")
这解决了我的问题。