【问题标题】:Proper way of storing blob images on GAE在 GAE 上存储 blob 图像的正确方法
【发布时间】:2013-06-24 23:04:10
【问题描述】:

我目前有两个选项可以在 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()

这两种方法是否存在显着差异,如果是,哪种方法更可取?谢谢。

【问题讨论】:

    标签: python google-app-engine


    【解决方案1】:

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

    【讨论】:

    • 以防万一,get_serving_url 可能很慢,因此存储 URL 将有助于您的页面加载更快。
    • @scroll_lock 我忘了说如果你刚开始.. 你应该考虑使用ndb 而不是db.. 这是最新最好的版本,有很多功能.. 更多在这里:developers.google.com/appengine/docs/python/ndb
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-12-21
        • 1970-01-01
        • 1970-01-01
        • 2018-04-05
        • 1970-01-01
        • 2019-11-21
        • 2015-01-31
        相关资源
        最近更新 更多