破碎的形象 - 谷歌应用程序引擎(Broken Images - Google App Engine

2019-10-17 10:29发布

首先,我意识到这是在这里一个相当普遍的问题,我已经看过很多其他类似的StackOverflow的问题,没有答案的问题解决了。

基本上,一旦用户提交图片 - >它们公布为空白影像 - 当我点击我会出现空白页图像的src。 这有什么错我的代码?

下面是位和来自各种文件我的代码段的混搭

<div class="card-image"><img src="/image?img_id={{card.key()}}"></img>

class Card(db.Model):
    image = db.BlobProperty(required = True)

class Image(MainHandler):
    def get(self):
        card = db.get(self.request.get('img_id'))
        if card.image:
            self.response.headers['Content-Type'] = 'image/png'
            self.response.out.write(card.image)
        else:
            self.response.out.write('No image')
 class Gallery(MainHandler):
       image = db.Blob(images.resize(self.request.get('image'), 32, 32))
       #later in the code, a Card is constructed.

Answer 1:

您的代码看起来好像没什么问题。 你确定你的模型中包含的图像数据?

第二。 有一个更好,更快,更便宜的方式,你可以为你的图片。 谷歌可以服务于画面,供各位,几乎免费,并与运行时的大小,使用App Engine的高性能影像服务系统。 要使用此功能,您必须使用Blob存储和使用get_serving_url。

这里是一个服务URL的一个例子:

https://lh6.ggpht.com/1HjICy6ju1e2GIg83L0qdliUBmPHUgKV8FP3QGK8Qf2pHVBfwkpO_V38ifAPm-9m20q_3ueZzdRCYQNyDE3pmA695iaLunjE=s0

UPDATE

如果你是新来的Blob存储区,我的建议是开始上传,并从Blob存储区提供图片。 看到文档的代码示例。

在此之后的作品,您可以优化并使用get_serving_url。 你只需要一次获得这个服务的URL,并保存在数据存储中,这样你就可以在你的HTML img标签使用。

下面是一个代码示例,以得到一个Blob存储BLOB,其中BLOB参考保存在数据存储服务网址:

class Dynamic(db.Model):                                                                        # key : name
    name = db.StringProperty() 
    blob_ref = blobstore.BlobReferenceProperty()
    serving_url = db.LinkProperty()

dyn= Dynamic.get_by_key_name(key_name)
try :                                                                               # get url with size = 0, do not save it
    dyn.serving_url = images.get_serving_url(dyn.blob_ref, size=None, secure_url=True)
except DeadlineExceededError : 
    try :             # sometimes this request fails, retry. This always works fine
        dyn.serving_url = images.get_serving_url(dyn.blob_ref, size=None, secure_url=True)
    except DeadlineExceededError :
        logging.error('Image API get_serving_url deadline error after retry' %(dyn.key().name()))                        
                return None
    dyn.put()


文章来源: Broken Images - Google App Engine