我正在使用jinja2在python中编写的谷歌应用引擎上运行一个网站。我已经将memcached用于处理数据库中的大部分内容,而且我对如何提高blobstore提供的图像效率感到困惑。我不认为GAE会比其他任何框架有太大的不同,但我想提一下以防万一。
无论如何,是否有任何建议的方法来缓存图像或阻止他们吃掉我的读写配额?
答案 0 :(得分:1)
Blobstore很好。
只需确保在url处理程序中设置HTTP缓存标头。这允许您的文件由浏览器缓存(在这种情况下您不需要支付任何费用)或App Engine的边缘缓存,您将支付带宽但不支持blobstore访问。
尽管边缘缓存非常小心。如果设置过长的过期,用户将永远不会看到更新的版本。通常,解决方法是在更改版本时更改URL。
答案 1 :(得分:0)
您可以使用谷歌图片API https://developers.google.com/appengine/docs/python/images/functions
我通常做的是上传,我存储images.get_serving_url(blob_key)创建的网址。不确定它是否便宜但在我的开发服务器上每次调用get_serving_url都会创建一个数据存储区写入。
答案 2 :(得分:0)
我的建议是使用Google Cloud Storage来存储您的图片。它更适合和推荐用于提供静态文件。好消息是,现在你可以使用相同的Images api:
注意:您还可以投放存储在Google Cloud Storage中的图像。为此,您需要使用Blobstore API create_gs_key()函数生成Blob密钥。您还需要在正在使用的存储桶上设置一个默认对象ACL,以提供您的应用
FULL_CONTROL
权限,以便映像服务可以将自己的ACL添加到对象中。有关ACL和权限的信息,请参阅Google Cloud Storage的文档。
PS。我喜欢的另一个很棒的功能是,如果您需要以不同的尺寸提供图像,则无需存储图像的不同分辨率。您只需将参数添加到get_serving_url
返回的网址即可。此外,您只需要拨打get_serving_url
一次,将此网址存储在某处,并在需要提供图片时使用它。此外,您可以重复使用相同的网址为所有不同尺寸的相同图像提供服务。
网址修改:
= sXX要调整图像大小,请将= sXX附加到图像URL的末尾,其中XX是0-1600之间的整数,表示新图像大小 像素。最大大小在IMG_SERVING_SIZES_LIMIT中定义。该 应用指定的API,将图像调整为提供的值 大小到图像的最长尺寸并保留原始尺寸 纵横比。例如,如果使用= s32来调整1200x1600的大小 图像,生成的图像是24x32。如果该图像是1600x1200, 调整大小的图像为32x24像素。
= sXX-c要裁剪图像并调整其大小,请将= sXX-c附加到图像URL的末尾,其中XX是0-1600之间的整数,表示新的 图像大小(像素)。最大尺寸定义为 IMG_SERVING_SIZES_LIMIT。 API将图像大小调整为提供的图像 值,将指定的大小应用于图像的最长尺寸 并保留原始宽高比。如果图像是肖像, API从顶部和底部均匀切片以形成正方形。如果 图像是横向的,API从左到右均匀切片 做一个正方形。裁剪后,API会将图像调整为大小 指定大小。