当前位置: 首页 > 面试题库 >

如何在GAE数据存储中显示图像?

柯波娃
2023-03-14
问题内容

我阅读了本教程以及所有可以找到的有关显示保存在数据存储区中的图像的资源,但仍然无法正常工作。感谢您的帮助。这是我以前的问题。

下面的代码用于/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()

问题答案:

您正在将图像源指向未定义的错误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()


 类似资料:
  • 问题内容: 我正在尝试显示上传到MySql中“存储”表的最后5张图像。我对PHP和数据库完全陌生,并且我一直在阅读有关如何做到这一点的很多文章,但是没有运气。 我可以一次存储和显示图片,但我希望能够拥有各种各样的画廊来显示最近上传的5张照片。 任何建议或帮助将不胜感激,谢谢! 附言:我知道将图片存储到这样的数据库时不赞成这样做,但是该项目仅用于实践。 index.php get.php 问题答案:

  • 如何从Android客户端上传图像到GAE(Google App Engine)数据存储? 尚未找到教程,已尝试了7天。

  • 问题内容: 进行GAE / J数据存储区备份的最简单方法是什么? 看起来好像有python bulkloader.py工具可以为Python应用程序执行备份,但是我应该怎么做才能备份Java应用程序?有什么方法可以使用python工具吗? 问题答案: 可以使用python工具bulkloader.py创建GAE Java应用的数据存储备份。您只需通过在web.xml中添加以下几行来设置remote

  • 你好,我正在制作员工目录。在这种形式下,我想上传员工的照片,当我试图存储图像时,我遇到了错误,比如Portlet暂时不可用,如果我成功删除图像上传逻辑,然后在数据库中删除其他数据存储。请帮助我如何在数据库中存储图像路径。我已在/webapps中创建图像文件夹。我想将我的所有图像存储在此文件夹中,并将图像路径存储到数据库中。请告诉我如何存储图像路径,以及存储图像路径后如何在其他页面中显示图像。 在这

  • 我已经上传了一些图像到Firebase的存储,然后我需要在一个网站上显示所有这些图像。我已经阅读了firebase的文档,但仍然无法找到正确的方式来显示所有的图片。所以,我的问题是,我的代码在什么地方错误地显示了一个偶数的单个图像?如何在web上同时显示所有图像(我读过一篇关于堆栈溢出的帖子,它可能需要获取所有图像的URL,所以,子问题是如何获取所有图像的URL)?顺便说一下,我的Firebase

  • 我需要在数据表列中动态显示图像,我在本地文件夹中有图像,如何在Bootsface数据表中这样做? 谢谢你的帮助!

  • 我对flutter还是新手,我一直试图在条形图中显示http请求中的一些数据。我找不到任何例子。我希望你们中的一些人能帮忙:) 我想使用网上画廊的这张图表。我只是为我的应用程序更改了类的名称: 现在我想把这两者结合起来。 数据是这样的: [{“时间戳”:“2018-06-29 14:39:18”,“RPM”:0,“RPM_Filter”:0,“accel”:0,“temp1”:104,“temp2

  • 问题内容: 我正在用HTML / JavaScript编写网页。我正在使用AJAX从后端下载图像。该图像表示为原始字节数组,而不是URL,因此我不能使用标准方法。 如何向用户显示上述图像? 问题答案: 尝试将此HTML代码段放入您提供的文档中: 然后,在JavaScript方面,您可以使用所谓的Data动态修改图片的属性。 或者,使用jQuery: 假定您的图像以PNG格式存储,这是非常流行的。如