2013-06-24 40 views
1

我目前有两个选项来在blobstore上存储一些图像。在GAE上存储blob图像的正确方法

我有一个用户模型class User(db.Model),我正在为用户保存一个头像。 一种方法是将头像保存为blobstore.BlobReferenceProperty(),然后通过user.avatar引用中的get_serving_url提供图片。

class User(db.Model): 
    avatar = blobstore.BlobReferenceProperty() 

url = get_serving_url(user.avatar) 

另一种选择是用get_serving_url()获得的图像的路径,并将其保存在用户模型LinkProperty后来只使用此链接服务的形象。

url = get_serving_url(image_file) 
class User(db.Model): 
    avatar = db.LinkProperty() 

这两种方法是否有显着差异,如果是的话,哪个更好?谢谢。

回答

2

你应该存储这两个。 BlobReference能够删除实际的BLOB和URL,以避免每次调用get_serving_url(),这可能会很慢。除非调用delete_serving_url(),否则由get_serving_url()返回的URL将不可更改,以防需要重置该URL,因为该URL是公开的但不可推测。

+1

为防万一还不清楚,get_serving_url可能很慢,所以存储URL将有助于加快页面加载速度。 – dragonx

+0

@dragonx我更新了我的答案,强调它 – Lipis

+0

非常好!谢谢。 –

0

使用BlobReferenceProperty。如果你存储了serve_url,你不能真的删除blob,因为你没有任何参考。

1

您应该将两个参考文件保存在模型中。您可以使用blobReferenceProperty引用最新版本的blob进行维护(删除和更新)以及提供图像的url,因为您只需要获取一次服务URL。