如何在GAE数据存储中显示图像? [英] How to display an image in GAE datastore?

查看:117
本文介绍了如何在GAE数据存储中显示图像?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我阅读了教程和所有可以找到的关于显示保存在数据存储中的图像的资源,但仍无法使其工作。我感谢任何帮助。 这是我以前的问题



以下代码为 / 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆