2015-09-16 65 views
0

我目前使用Podio JS SDK連接到podio REST API。我已使用username and password authentication流設置了一個登錄屏幕來捕獲用戶名和密碼。Podio Javascript SDK:客戶受限於顯示來自podio的圖片

我可以提出請求並獲取我需要的信息。在我的要求之一,我收到一個圖片網址。然後,我將img url放入圖像標籤中,如下所示:

<img src="img.url"/> 

問題是我的客戶端無法查看圖像。我在這裏看着Working with files爲了找到答案。

問題是,圖像只能在當前登錄的用戶的客戶端中查看,但我已經過身份驗證。

我錯過了什麼嗎?我如何顯示圖像,是否已使用用戶名和密碼登錄,是否將access_token,refresh_token等存儲在本地存儲中,並可以進行所有其他必要的調用。

回答

0

儘管您有一個訪問令牌,可以使用username and password authentication訪問您的所有跑道數據,但跑道的身份驗證是基於cookie的,所以如果您的客戶端沒有通過podio網絡應用的登錄屏幕進行身份驗證,您的客戶端將不會能夠直接從網絡應用程序讀取圖像。您的訪問將被阻止。

解決方案

如果不通過客戶端進行身份驗證,但可以訪問API,你可以從這裏下載原始圖像數據:https://api.podio.com/file/{{imgId}}/raw。一旦獲得原始圖像數據,您就可以將數據編碼爲base64格式,並且如果您的客戶機是網絡客戶機,則在<img>標記中使用Data URI作爲src標記。

0

嘗試通過標題發送圖像。 這用於工作,雖然它是一個相當笨重的解決方案。 可能會被新的PodioAPI棄用。

首先設置你的功能。

function showImage($item, $index, $id, $style = '', $class='', $alt='',$imgtitle='') { 

foreach($item->fields as $field) { 

    if($field->field_id== $id) { 
     $picture_id = $field->values[$index]['value']['file_id']; 
     echo "<img style='$style' class='$class' src='getImage.php?id=$picture_id' alt='$alt' title='$imgtitle' />"; 
     global $picture_id; 
    } 
} 
} 

這將是你的getimage.php。 你也可以像這樣設置PDF。

$img_id = $_GET['id']; 

$cache = new cache(
     ... 
     ); 

$file_id = "image{$img_id}"; 
if(!$cache->has($file_id)) { 
    $file = $cache->set($file_id, PodioFile::get($img_id)); 
} else { 
    $file = $cache->get($file_id); 
} 

$picture_id = "image_cache_{$img_id}"; 
if(!$cache->has($picture_id)) { 
    $image = $cache->set($picture_id, Podio::get($file->link, array(), array('file_download' => true))->body); 
} else { 
    $image = $cache->get($picture_id); 
} 

header('Content-Type: image/png'); 
echo $image; 

希望它有幫助。

+0

謝謝。我使用了我在下面找到的解決方案。 – inspired