Как отобразить изображение в хранилище данных GAE? - PullRequest
1 голос
/ 25 сентября 2011

Я прочитал учебник и все источники, которые я мог найти об отображении изображения, сохраненного в хранилище данных, и все же я не мог заставить его работать. Я ценю любую помощь. Это мой предыдущий вопрос .

Код ниже, для /displayimage показывает неработающую ссылку для изображения; и для /image это дает BadKeyError: Invalid string key . Согласно Ник Джонсон отвечает здесь Я должен передать пустую строку для img_id, но logging.info в /display image показывает этот ключ: (((result.key():)))) agpkZXZ-dGluZy0xcg8LEghIb21lUGFnZRjOCAw. Спасибо за вашу помощь.

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()

1 Ответ

1 голос
/ 26 сентября 2011

Вы указываете источник изображения на не определенный неправильный img маршрут.
Правильная ссылка должна указывать на /image, например:

<img src="/image?img_id=%s"></img>

Я проверил ваш кодмоё исправление и оно прекрасно работает:

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...