1

首先,我意识到这是一个相当常见的问题,我查看了许多其他类似的 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.
4

1 回答 1

2

你的代码对我来说看起来不错。您确定您的模型包含图像数据吗?

第二。有一种更好、更快、更便宜的方式可以为您的图像提供服务。Google 可以使用 App Engine 的高性能图像服务系统为您提供图像,几乎是免费的,并且具有运行时大小。要使用它,您必须使用 blobstore 并使用 get_serving_url。

以下是服务网址的示例:

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

更新

如果您是 blobstore 的新手,我的建议是开始从 blobstore 上传和提供图像。请参阅文档中的代码示例。

完成此工作后,您可以优化和使用 get_serving_url。您只需获取此服务 url 一次并保存在数据存储中,因此您可以在 html img 标记中使用 in。

下面是获取 blobstore blob 的服务 url 的代码示例,其中 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()
于 2012-11-26T22:17:31.810 回答