2010-08-21 35 views
1

我有一个通用文件存储由Google App Engine Blobstore支持,当我向用户显示其内容时,我想区分图像与其他文件 - 我想为每个图像显示缩略图。如何检测Blobstore条目是否为get_serving_url可用的图像?

的Python get_serving_url函数并不关心(至少在开发服务器)如​​果给斑点实际上是一个图像,Java的getServingUrl抛出异常恩...

所以我的问题是:如何在python如果侦测Blob商店条目是一个图像,所以我可以得到一个serving_url并在UI中使用它?

编辑:

在生产蟒蛇是在get_serving_url电话扔NotImageError与不支持BLOB,它只是没有记录,它不这样做dev的服务器上。

+1

你得到的最好是启发式。如果一个给定的BLOB“是”一个图像(无论如何定义了一个图像?),最多只能显示一个图像 - 但它也可能是来自'dev/null'的随机位,这是不可能的。 – delnan 2010-08-21 19:16:49

+0

BlobInfo有[内容类型](http://code.google.com/intl/pl/appengine/docs/python/blobstore/blobinfoclass.html#BlobInfo_content_type),所以实际上我可以......但不想做它手动:P – 2010-08-21 20:18:21

回答

0

您可以将调用放入try ... except块中,捕获发现该对象不是图像时引发的异常。

+0

没有异常抛出... Quote:»Python的get_serving_url函数并不在意(至少在开发服务器),如果给定blob实际上是一个图像,Java的getServingUrl抛出异常...« – 2010-08-22 09:41:36

+0

这听起来像一个错误,你应该报告它。 – 2010-08-22 11:12:17

+0

刚刚在生产环境中部署了解决方案,并且在Python中引入了'NotImageError'。 @Matt是对的,GAE开发服务器api中存在一个错误。 – 2010-08-22 11:43:39

3

根据图像如何被上传到您的Blob存储区,他们可能都包含自己的MIME类型,你可以尝试作为确定的方法,哪些项目是最有可能使用BlobInfo包含有效图像数据的使用方法:

blob_info = BlobInfo.get(blob_image_key) 

# All valid image formats for the GAE Images service. 
image_types = ('image/bmp', 'image/jpeg', 'image/png', 
    'image/gif', 'image/tiff', 'image/x-icon') 

if blob_info.content_type in image_types: 
    # Obtain your serving URL. 
+0

Thx的提示:),但我想知道是否有涉及API调用的更完整的解决方案,这不涉及我猜测图像服务serving_url支持哪些内容类型。 – 2010-08-21 20:21:42

+1

据我所知,GAE没有可以运行的API调用来检查Images服务是否可以渲染图像。我已更新我的帖子以仅反映来自GAE服务的有效图片。 – Andrew 2010-08-21 20:54:41

+0

thx!你是基于这个[图像格式](http://code.google.com/intl/pl-PL/appengine/docs/python/images/overview.html#Image_Formats)列表,还是有其他? – 2010-08-22 09:38:23