在Python中显示Blob图片(App Engine)

我无法将图像显示在页面上。我可以存储它。

这些是处理程序:

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的内容如下:

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>

回答:

首先,我认为您正在将图像密钥和图像二进制数据混合在一起。

您应该将图像密钥(字符串)写入模板:

 <img src="/disp?key={{image_key}}" />

即,如果您只是将image.key()传递给模板,则最终的html应该如下所示:

 <img src="/disp?key=AC3CK3333KCCK2K213" />

您可以将其视为一个两步过程。您呈现您的模板。用户浏览器呈现html并获取您的图像处理程序。然后,图像处理程序发送二进制数据。

(顺便说一句,我的印象是您使用<img ... /><img ...></img>都不关闭html标签<img .../></img>

在图像处理程序disp_image中,您应该返回图像的二进制数据。看来您的第一个条件还可以,但是我认为您的else条件将仅返回文本“

/static/unknown.gif”,而不是gif文件的实际二进制数据。

    else:

self.response.headers['Content-Type'] = "image/png"

return self.response.out.write("/static/unknown.gif")

您应该将unknown.gif存储在数据存储区中,并通过键引用它,或者您应该将"/static/unknown.gif"网址写到模板中以代替"/disp?key=..."

最后,最简单的测试图像处理程序是否正常的方法是,当您插入<domain>/disp?key=...浏览器URL栏时,它将加载所需的图像。

以上是 在Python中显示Blob图片(App Engine) 的全部内容, 来源链接: utcz.com/qa/415596.html

回到顶部