如何检测Blobstore条目是否为图像,以便get_serving_url正常工作?
我有一个通用的文件存储系统,使用的是Google App Engine的Blobstore。当我向用户展示这些文件的内容时,我想区分一下图片和其他文件——我想为每张图片显示一个缩略图。
Python的get_serving_url函数在开发服务器上并不关心给定的blob是否真的是一张图片,而Java的getServingUrl则会抛出一个异常……
所以我的问题是:如何在Python中检测一个blob存储的条目是否是图片,这样我就可以获取一个serving_url并在用户界面中使用它?
编辑:
在生产环境中,Python在调用get_serving_url时,如果给定的blob不支持,就会抛出NotImageError
错误——这并没有在文档中说明,而且在开发服务器上不会出现这种情况。
2 个回答
3
根据你是如何将图片上传到Blobstore的,它们可能都包含了自己的MIME类型。你可以尝试利用这些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
你可以把这个调用放在一个try...except块里,这样当发现这个对象不是图片时,就可以捕捉到抛出的异常。