2013-07-16 111 views
0

我正在使用Web2Py,用戶圖像是動態的,必須從同一服務器中的不同系統加載,因此無法將它們移動到包含在web2py應用程序目錄中。所以我不能有相對路徑的圖像。 Symbolink鏈接不是一個選項。Web2py:從動作調用或Web服務調用服務圖像

我在想這個解決方案可能是從一個動作調用或Web服務提供JPG圖像,這樣應用程序就可以訪問本地文件並以編程方式返回它,而不必移動一個圖像。例如,一個視圖有以下代碼:

<li class="file ext_jpg"> 
    <figure class="image_container"> 
     <img src="controller_name/action_serving_images/unique_id_genereted_for_this_image.jpg" alt=""> 
    </figure> 
</li> 

具有操作:

def action_serving_images(image_id) 
    #obtain image based on it's unique generated id 
    return image 

或者用於該服務的情況下:

<li class="file ext_jpg"> 
    <figure class="image_container"> 
     <img src="controller_name/service_serving_images/jpg/image/unique_id_genereted_for_this_image.jpg" alt=""> 
    </figure> 
</li> 

具有服務:

def service_serving_images(): 
    return service() 

@service.jpg 
def image(image_id): 
    #obtain image based on it's unique generated id 
    return image 
  1. 是否有這些選項可能?
  2. 如何獲取圖像並將其作爲字節流以適當的內容類型返回,以便瀏覽器可以正確渲染它?
  3. 在服務的情況下,我是否需要爲JPG創建特殊的裝飾器?怎麼樣?

回答

2

這比這更容易。

首先創建一個這樣的動作:

def serve_image(): 
    id = request.args(0) 
    filename = get_image_filename_from(id) 
    stream = open(filename,'rb') 
    return response.stream(stream, attachment=True, filename=filename) 

然後在你的看法,你做的事:

<img src="{{=URL('serve_image',args='1234')}}" /> 

,其中1234是您想要的圖像的ID。

+0

這絕對是這樣的,只有3改變我作出或它的工作: (1)加入reques反對響應 (2)設置固定爲False (3)使用'vars'發送圖像ID,而不是'args' urllib引用,使用參數給我帶來了太多的斜線和加號的麻煩 'return response.stream(stream,request = request,attachment = False,filename = filename)''{{= URL('serve_image' ,乏= '1234')}}' – sapeish