破碎的图像-谷歌应用程序引擎



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

你的代码对我来说很好。你确定你的模型包含图像数据吗?

第二。有一种更好、更快、更便宜的方式可以为您提供图像。谷歌可以使用应用引擎的高性能图像服务系统为您提供图像,几乎免费,并在运行时调整大小。要使用它,您必须使用blobstore并使用get_serving_url。

以下是一个服务url的示例:

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

更新

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

完成后,您可以优化并使用get_serving_url。您只需要获得一次这个服务url并保存在数据存储中,就可以在您的html img标记中使用。

以下是获取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()

相关内容

最新更新