我目前正在为给定的产品存储上传的图片,如下所示:
class Product(db.Model):
images= db.ListProperty(db.Blob)
# More properties ...
我用以下方法检索它们:
class ImageHandler(webapp2.RequestHandler):
def get(self):
productKey = cgi.escape(self.request.get('id'))
if productKey:
try:
product = Product.get(db.Key(productKey))
if product and product.images:
idx = 0 # if not img is passed, return the first one
imageIndex = cgi.escape(self.request.get('img'))
if imageIndex:
imageIndex = int(imageIndex)
if imageIndex > 0 and imageIndex < len(product.images):
idx = imageIndex
self.response.headers['Content-Type'] = 'image/jpeg'
self.response.out.write(str(product.images[idx]))
return
self.redirect('/img/image-missing.jpg')
return
except:
self.redirect('/img/image-404.jpg')
return
self.redirect('/img/image-404.jpg')
致电/image?id={{productkey}}&img={{imageindex}}
。
现在考虑:
我应该像这样保留它,还是应该为图像设置单独的模型,该模型只包含db.BlobProperty
,而在产品模型中有db.ListProperty(db.Key)
?
我不确定当我得到()产品(这会很糟糕)时,将图像保留为产品内部的blob是否会自动获取它们,或者它是否会减少数据存储访问,因为我不需要另一个图像实体。
最后,任何改进这个python代码的建议(那是很多重定向,返回和条件)也一定会受到赞赏。 谢谢。
答案 0 :(得分:3)
如果您认为每个数据存储区实体的大小都是1MB,那么将Blob列表存储到一个实体中很容易成为问题。最好将每个图像存储在单独的模型中,并保留产品模型的密钥列表。