sui*_*mer 5 python google-app-engine blob image
我无法在页面上显示图像.我可以把它存放得很好.
这些是处理程序:
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')
Run Code Online (Sandbox Code Playgroud)
db的东西如下:
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()
Run Code Online (Sandbox Code Playgroud)
表格:
<form enctype="multipart/form-data" method="post">
<input type="file" name="img" />
</form>
Run Code Online (Sandbox Code Playgroud)
我的代码模板替换位:
<img src="/disp?key={{image}}" /></img>
Run Code Online (Sandbox Code Playgroud)
其一,我认为您混淆了图像密钥和图像二进制数据。
模板
您应该将图像键(字符串)写入模板:
<img src="/disp?key={{image_key}}" />
Run Code Online (Sandbox Code Playgroud)
也就是说,如果你只是将 image.key() 传递给你的模板,你的最终 html 应该如下所示:
<img src="/disp?key=AC3CK3333KCCK2K213" />
Run Code Online (Sandbox Code Playgroud)
您可以将其视为一个两步过程。您渲染您的模板。用户浏览器呈现 html 并获取图像处理程序。然后图像处理程序发送二进制数据。
(顺便说一句,我的印象是你用 或者<img ... />或<img ...></img>,而不是两者都关闭你的 html 标签<img .../></img>)
图像处理程序
在图像处理程序 disp_image 中,您应该返回图像的二进制数据。看起来你的第一个条件没问题,但我认为你的其他条件只会返回文本“/static/unknown.gif”,而不是 gif 文件的实际二进制数据。
else:
self.response.headers['Content-Type'] = "image/png"
return self.response.out.write("/static/unknown.gif")
Run Code Online (Sandbox Code Playgroud)
您应该将unknown.gif存储在您的数据存储中并通过键引用它,或者您应该将url写入"/static/unknown.gif"模板而不是"/disp?key=..."
最后,测试图像处理程序是否正常工作的最简单方法是,当您插入<domain>/disp?key=...浏览器 URL 栏时,它应该加载所需的图像。
| 归档时间: |
|
| 查看次数: |
2740 次 |
| 最近记录: |