2012-04-13 42 views
0

我正在將我的網站轉換爲使用blobstore進行圖像服務,並遇到問題。我有一個頁面,其中大量的圖片是動態渲染的(通過jinja),唯一可用的數據是指向包含相關服務url的圖片對象的實體關鍵字。從高性能blobstore服務的圖像無法直接訪問get_serving_url()

以前每幅圖像有沿"/show-image?key={{image_key}}"線一個URL,它指向沿着該線的請求處理程序:

def get(self): 
    imageInfo = db.get(self.request.args.get("key")) 
    imagedata = imageInfo.data // the image is stored as a blob in the normal datastore 
    response = Response() 
    response.data = imagedata 
    response.headers['Content-Type'] = imageInfo.type 
    return response 

我的問題是:如何修改這個讓,而不是返回在imageInfo.data的響應中,我返回的響應爲imageInfo.saved_serving_url(在創建圖像對象時從get_serving_url生成)。更重要的是,這是一個好主意嗎?看起來像將saved_serving_url轉換回數據(例如使用urllib.fetch)可能只是抵消了首先使用高速數據存儲的速度和效率?

也許我應該重寫我的代碼,以便jinja模板可以直接訪問每個圖像的服務URL。但理想情況下,我想避免這種情況,因爲我必須傳遞大量的並行列表。

+0

自己提取URL並返回內容將比直接提供blob更慢。將服務重定向到服務URL同樣會使您失去使用圖片服務API的所有好處。直接使用圖片提供網址是獲得API提供的改進的唯一途徑。 – 2012-04-18 00:34:05

回答

3

爲什麼不返回服務的url而不是imagedata?

<img src="/show-image?key={{image_key}}" /> 

def get(self): 
    imageInfo = db.get(self.request.args.get("key")) 
    return imageInfo.saved_serving_url 
+0

這將是理想的,但它似乎並沒有工作,也沒有作爲self.redirect()返回的網址。感覺像應該有辦法做到這一點,雖然... – Cerzi 2012-04-13 13:22:00

+0

什麼不行?你有錯誤嗎?它不會返回serving_url嗎? – aschmid00 2012-04-13 13:31:52

+0

圖像加載失敗 - 頁面的源代碼用src「/ show-key?key = blahblah」顯示它們,但據我所知簡單地返回一個url不會導致圖像加載。記住這些是我從img-tag中檢索的嵌入式圖像,而不是ajax請求或替換完整圖像src url的東西。 話雖如此,我對http響應的知識並不是很好,所以也許我錯過了一些東西...... – Cerzi 2012-04-13 13:52:24