我目前正在存储给定产品的上传图片,如下所示:
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}}
.
现在考虑:
- 数据存储成本
- CPU/内存/时间成本
- 可能迁移到另一个应用程序/数据存储甚至亚马逊等。
- 能够返回调整大小的图像以进行缩略图显示等。
- 我没有考虑的其他因素
我应该保持这样的状态,还是应该有一个单独的图像模型,它只包含 a db.BlobProperty
,db.ListProperty(db.Key)
而在产品模型中有 a ?
我不确定当我 get() 产品时将图像作为 blob 保存在产品内部是否会自动获取它们(这会很糟糕),或者它是否减少了数据存储访问,因为我不必获取另一个图像实体。
最后,任何改进这个 python 代码的建议(有很多重定向、返回和条件)肯定也会受到赞赏。谢谢你。