在GAE上存储blob图像的正确方法

时间:2013-06-24 03:09:35

标签: python google-app-engine

我目前有两个选项可以在blobstore上存储一些图像。

我有一个用户模型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()

两种方法之间是否存在显着差异?如果是,那更可取的是什么?谢谢。

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

使用BlobReferenceProperty。如果你存储了serving_url,你就无法真正删除blob,因为你没有任何对它的引用。