2010-08-21 47 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