如何在GAE数据存储中显示图像? [英] How to display an image in GAE datastore?
问题描述
我阅读了教程和所有可以找到的关于显示保存在数据存储中的图像的资源,但仍无法使其工作。我感谢任何帮助。 这是我以前的问题。
以下代码为 / displayimage
显示图像的断开链接;并为 / image
给出 BadKeyError:无效的字符串键。
根据 Nick Johnson回复此处我必须传递一个空字符串 img_id
,但在 / display image
中的logging.info显示这个键值:(((result.key():))))agpkZXZ- dGluZy0xcg8LEghIb21lUGFnZRjOCAw
。
class HomePage(db.Model):
thumbnail = db.BlobProperty()
firm_name = db.StringProperty()
$ b $ class ImageUpload(webapp.RequestHandler):
def get(self):
...
self.response。 out.write(
< form action =/ imagesaveenctype =multipart / form-datamethod =post>
< div>< label>公司名称:< / label>< input type =textname =firm_namesize = 40>< / div>
< div>< input type =filename =img/ >< / div>
< div>< input type =submitvalue =上传图片>< / div>
< / form>
)
$ b $ class ImageSave(webapp.RequestHandler):
def post(self):
homepage = HomePage()
thumbnail = self.request.get img)
firm_name = self.request.get(firm_name)
homepage.thumbnail = db.Blob(缩略图)
主页。 firm_name = firm_name
homepage.put()
self.redirect(/ imageupload)
$ b $ class ImageResize(webapp.RequestHandler):
def post(self):
q = HomepageImage.all()
q.filter(firm_name,mta)
qTable = q.get()
如果qTable:
qTable.thumbnail = db.Blob(images.resize(self.request.get(img),32,32))
db.put(qTable)
else :
self.response.out.write(firm not found)
self.redirect(/ imageupload)
class DisplayImage(webapp.RequestHandler ):
def get(self):
...
query = HomePage.all()
query.filter(firm_name,mta)
result = query.get()
self.response.out.write(公司名称:%s%result.firm_name)
#自己。 response.out.write(< img src =img?img_id =%s>< / img>%
#将此行更改为systempuntoout的评论为:
self.response.out.write(< img src =/ image?img_id =%s>< / img>%
result.key ())
#但我仍然得到相同的错误
class Image(webapp.RequestHandler):
def get(self):
...
#I我添加下一行来显示img_id是一个空字符串。
#whyimg_id在这里是空的吗?
img_id = self.request.get(img_id)
logging.info(******************* ******* img_id:%s **************************%img_id)
#** ************************ img_id:************************ **
homepage = db.get(self.request.get(img_id))
如果homepage.thumbnail:
self.response.headers [ 'content-Type'] =image / jpg
self.response.out.write(homepage.thumbnail)
else:
self.response.out.write(no image )
application = webapp.WSGIApplication(
[
(/ imageresize,ImageResize),
(/ imageupload,ImageUpload),
(/ displayimage,DisplayImage),
(/ imagesave,ImageSave),
(/ image,Image),
],
debug = True
)
def main():
run_wsgi_app(应用程序)
if __name__ ==__main__:
main()
您正在将图像源指向未定义的错误 img
路线。
正确的链接应该指向 / image
像这样:
< img src =/ image?img_id =%s >< / IMG>
我已经使用我的更正测试了您的代码,并且效果很好:
from google.appengine.ext import db $ b $ from google.appengine.api从google.appengine.ext导入用户
import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
导入日志记录
主页(db.Model):
thumbnail = db.BlobProperty ()
firm_name = db.StringProperty()
$ b $ class ImageUpload(webapp.RequestHandler):
def get(self):
self.response.out.write (
< form action =/ imagesaveenctype =multipart / form-datamethod =post>
< div>< label>公司名称:< / label>< input type =textname =firm_namesize = 40>< / div>
< div>< input type =filename =img/><< ; / div>
< div>< input type =submitvalue =上传图片>< / div>
< / form>
)
class ImageSave(webapp.RequestHandler):
def post(self):
homepage = HomePage()
thumbnail = self.request.get(img)
firm_name = self.request.get(firm_name)
homepage.thumbnail = db.Blob(thumbnail)
homepage.firm_name = firm_name
homepage.put()
self .redirect(/ imageupload)
Image ImageResize(webapp.RequestHandler):
def post(self):
q = HomepageImage.all()
q。 filter(firm_name,mta)
qTable = q.get()
if qTable:
qTable.thumbnail = db.Blob(images.resize(self.request.get img),32,32))
db.put(qTable)
else:
self.response.out.write(firm not found)
self.redirect(/ imageupload)
$ b $ class DisplayImage(webapp.RequestHandler):
def get(self):
query = HomePage.all()
query.filter(firm_name,mta)
result = query.get()
self.response.out.write(公司名称:%s%result.firm_name)
self.response.out.write( < img src =/ image?img_id =%s>< / img>%
result.key())
类图像(webapp.RequestHandler ):
def get(self):
img_id = self.request.get(img_id)
logging.info(*********** *************** img_id:%s **************************%img_id )
homepage = db.get(self.request.get(img_id))
如果homepage.thumbnail:
self.response.headers ['Content-Type'] =image / jpg
self.response.out.write(homepage.thumbnail)
else:
self.response.out.write(no image)
application = webapp.WSGIApplication(
[
(/ imageresize,ImageResize),
(/ imageupload,ImageUpload),
(/ displayimage ,DisplayImage),
(/ imagesave,ImageSave),
(/ image,Image),
],
debug = True
)
def main():
run_wsgi_app(application)
if __name__ ==__main__:
main ()
I read the tutorial and all the sources I could find about displaying an image saved in datastore and still I could not make it work. I appreciate any help. This is my previous question.
The code below, for /displayimage
shows broken link for the image; and for /image
it gives BadKeyError: Invalid string key .
According to Nick Johnson reply here I must be passing an empty string for img_id
but logging.info in /display image
shows this key: (((result.key():)))) agpkZXZ-dGluZy0xcg8LEghIb21lUGFnZRjOCAw
. Thanks for your help.
class HomePage(db.Model):
thumbnail = db.BlobProperty()
firm_name = db.StringProperty()
class ImageUpload(webapp.RequestHandler):
def get(self):
...
self.response.out.write("""
<form action="/imagesave" enctype="multipart/form-data" method="post">
<div><label>firm name:</label> <input type="text" name="firm_name" size=40></div>
<div><input type="file" name="img" /></div>
<div><input type="submit" value="Upload image"></div>
</form>
""")
class ImageSave(webapp.RequestHandler):
def post(self):
homepage = HomePage()
thumbnail = self.request.get("img")
firm_name = self.request.get("firm_name")
homepage.thumbnail = db.Blob(thumbnail)
homepage.firm_name = firm_name
homepage.put()
self.redirect("/imageupload")
class ImageResize(webapp.RequestHandler):
def post(self):
q = HomepageImage.all()
q.filter("firm_name", "mta")
qTable = q.get()
if qTable:
qTable.thumbnail = db.Blob(images.resize(self.request.get("img"), 32, 32))
db.put(qTable)
else:
self.response.out.write("""firm not found""")
self.redirect("/imageupload")
class DisplayImage(webapp.RequestHandler):
def get(self):
...
query = HomePage.all()
query.filter("firm_name", "mta")
result = query.get()
self.response.out.write("""firm name: %s""" % result.firm_name)
#self.response.out.write("""<img src="img?img_id=%s"></img>""" %
#chenged this line as systempuntoout's comment to:
self.response.out.write("""<img src="/image?img_id=%s"></img>""" %
result.key())
#but I still get the same error
class Image(webapp.RequestHandler):
def get(self):
...
#I am adding the next line to show that "img_id" is an empty string.
#why "img_id" empty here?
img_id = self.request.get("img_id")
logging.info("""**************************img_id: %s**************************""" % img_id)
#**************************img_id: **************************
homepage = db.get(self.request.get("img_id"))
if homepage.thumbnail:
self.response.headers['Content-Type'] = "image/jpg"
self.response.out.write(homepage.thumbnail)
else:
self.response.out.write("no image")
application = webapp.WSGIApplication(
[
("/imageresize",ImageResize),
("/imageupload", ImageUpload),
("/displayimage", DisplayImage),
("/imagesave", ImageSave),
("/image", Image),
],
debug=True
)
def main():
run_wsgi_app(application)
if __name__ == "__main__":
main()
You are pointing the image source to a not defined wrong img
route .
The correct link should point to /image
like this:
<img src="/image?img_id=%s"></img>
I've tested your code with my correction and it works nicely:
from google.appengine.ext import db
from google.appengine.api import users
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
import logging
class HomePage(db.Model):
thumbnail = db.BlobProperty()
firm_name = db.StringProperty()
class ImageUpload(webapp.RequestHandler):
def get(self):
self.response.out.write("""
<form action="/imagesave" enctype="multipart/form-data" method="post">
<div><label>firm name:</label> <input type="text" name="firm_name" size=40></div>
<div><input type="file" name="img" /></div>
<div><input type="submit" value="Upload image"></div>
</form>
""")
class ImageSave(webapp.RequestHandler):
def post(self):
homepage = HomePage()
thumbnail = self.request.get("img")
firm_name = self.request.get("firm_name")
homepage.thumbnail = db.Blob(thumbnail)
homepage.firm_name = firm_name
homepage.put()
self.redirect("/imageupload")
class ImageResize(webapp.RequestHandler):
def post(self):
q = HomepageImage.all()
q.filter("firm_name", "mta")
qTable = q.get()
if qTable:
qTable.thumbnail = db.Blob(images.resize(self.request.get("img"), 32, 32))
db.put(qTable)
else:
self.response.out.write("""firm not found""")
self.redirect("/imageupload")
class DisplayImage(webapp.RequestHandler):
def get(self):
query = HomePage.all()
query.filter("firm_name", "mta")
result = query.get()
self.response.out.write("""firm name: %s""" % result.firm_name)
self.response.out.write("""<img src="/image?img_id=%s"></img>""" %
result.key())
class Image(webapp.RequestHandler):
def get(self):
img_id = self.request.get("img_id")
logging.info("""**************************img_id: %s**************************""" % img_id)
homepage = db.get(self.request.get("img_id"))
if homepage.thumbnail:
self.response.headers['Content-Type'] = "image/jpg"
self.response.out.write(homepage.thumbnail)
else:
self.response.out.write("no image")
application = webapp.WSGIApplication(
[
("/imageresize",ImageResize),
("/imageupload", ImageUpload),
("/displayimage", DisplayImage),
("/imagesave", ImageSave),
("/image", Image),
],
debug=True
)
def main():
run_wsgi_app(application)
if __name__ == "__main__":
main()
这篇关于如何在GAE数据存储中显示图像?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!