在Python中显示Blob图像(应用程序引擎)
我无法在页面上显示图像。我可以很好地保存它 以下是处理程序:在Python中显示Blob图像(应用程序引擎),python,image,google-app-engine,blob,Python,Image,Google App Engine,Blob,我无法在页面上显示图像。我可以很好地保存它 以下是处理程序: class disp_image(webapp.RequestHandler): def get(self): key = self.request.get('key') image = Images.get(key) if image: self.response.headers['Content-Type'] = "image/png"
class disp_image(webapp.RequestHandler):
def get(self):
key = self.request.get('key')
image = Images.get(key)
if image:
self.response.headers['Content-Type'] = "image/png"
return self.response.out.write(images.image)
else:
self.response.headers['Content-Type'] = "image/png"
return self.response.out.write("/static/unknown.gif")
class Profile(MainHandler):
def get(self):
if self.user:
self.render('profile.html', username = self.user.name, email = self.user.email, first_name = self.user.first_name, last_name = self.user.last_name, country = self.user.country, prov_state = self.user.prov_state, city_town = self.user.city_town)
else:
self.redirect('/register')
class Change_Profile_Image(MainHandler):
def get(self):
if self.user:
self.render('change_profile_image.html', username = self.user.name, firstname=self.user.first_name)
else:
self.render('change_profile_image.html')
def post(self):
images = Images()
imageupl = self.request.get('img')
images.image = db.Blob(imageupl)
images.put()
self.redirect('/profile')
db stuff的功能如下:
class Images(db.Model):
image = db.BlobProperty()
class User(db.Model):
name = db.StringProperty(required=True)
pw_hash = db.StringProperty(required=True)
email = db.StringProperty(required=True)
first_name = db.StringProperty()
last_name = db.StringProperty()
country = db.StringProperty()
prov_state = db.StringProperty()
city_town= db.StringProperty()
clan= db.StringProperty()
handle= db.StringProperty()
表格:
<form enctype="multipart/form-data" method="post">
<input type="file" name="img" />
</form>
我的模板替换位代码:
<img src="/disp?key={{image}}" /></img>
我不确定,但我认为您不应该从
disp\u image
类的get方法返回
class disp_image(webapp.RequestHandler):
def get(self):
key = self.request.get('key')
image = Images.get(key)
if image:
self.response.headers['Content-Type'] = "image/png"
self.response.out.write(images.image)
else:
self.response.headers['Content-Type'] = "image/png"
self.response.out.write("/static/unknown.gif")
你能解释一下模板渲染是从哪里调用的吗?您在哪里传递
图像
属性?您不必自己提供图像。谷歌可以用谷歌高性能图像服务免费完成这项工作!
见:
获取服务url(blob\u键,大小=None,裁剪=False,安全url=None)
您只需获取一次服务url,然后将其保存在Images模型类的HTML模板中即可使用。首先,我认为您混淆了图像键和图像二进制数据 模板 您应该将图像键(字符串)写入模板:
<img src="/disp?key={{image_key}}" />
<img src="/disp?key=AC3CK3333KCCK2K213" />
您应该将unknown.gif存储在数据存储中并按键引用它,或者您应该将“/static/unknown.gif”
url写入模板,而不是“/disp?key=…”
最后,测试图像处理程序是否工作的最简单方法是,当您将
/disp?key=…
插入浏览器URL栏时,它应该加载所需的图像 你有什么问题?(404,垃圾内容,等等?)你也可以发布你的app.yaml和路由设置。没有传递{image}。另外,我已经手动输入了image键,但仍然没有显示任何图像。Yaml{{应用程序:suitegamer版本:1运行时:python27 api_版本:1线程安全:true处理程序:-url:/static static\u dir:static-url:/img static\u dir:img-url://.*脚本:main.app库:-名称:jinja2版本:最新-名称:PIL版本:“1.1.7”}
我将首先尝试查看/disp?key=是否正常工作。您可以发布与每个处理程序相关的路由吗?您已经向我们展示了(几乎)所有相关的代码都很好,但你们并没有真正解释问题所在。我已经解决了。我已经阅读了太多教程,似乎代码是遗留下来的,但python并没有将其视为一个错误。非常狡猾。谢谢各位。你们能告诉我们,为了解决这个问题,你们做了哪些更改吗?这可能会对我们未来有所帮助ers.:)suitegamer,请发布你的最终解决方案。我也有同样的问题,但还没有找到答案。这不是免费的。你为外向的bandwith付费。这有点随机,但你会因为支持GAE lol而得到谷歌的付费吗?你当然是一个超级粉丝,一开始我喜欢它的简单性,但现在它开始变得有点低效了,太复杂了。
else:
self.response.headers['Content-Type'] = "image/png"
return self.response.out.write("/static/unknown.gif")