Podio Javascript SDK: клиенту запрещено отображать изображение из podio

В настоящее время я использую Podio JS SDK для подключения к podio REST API. Я установил экран входа в систему для ввода имени пользователя и пароля с помощью потока аутентификации имени пользователя и пароля.

Могу сделать запрос и получить нужную мне информацию. В одном из моих запросов я получаю URL-адрес изображения. Затем я помещаю URL-адрес img в тег изображения, например,

<img src="img.url"/> 

Проблема в том, что мой клиент не может не просматривать изображение. Я просмотрел здесь Работа с файлами, чтобы найти ответ.

Проблема в том, что изображение может быть просмотрено в клиенте только пользователем, который в данный момент вошел в систему, но я уже прошел аутентификацию.

Я что-то упускаю? Как я могу показать изображение, поскольку я уже вошел в систему с именем пользователя и паролем, я сохраняю access_token, refresh_token и т. Д. В локальном хранилище и могу выполнять все другие необходимые вызовы.


person Abdullah Rasheed    schedule 16.09.2015    source источник


Ответы (2)


Попробуйте отправить изображения через заголовки. Раньше это работало, хотя это довольно неуклюжее решение. Возможно, станет устаревшим с новым 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;

Надеюсь, поможет.

person leopold    schedule 26.10.2015
comment
Спасибо. Я использовал решение, которое нашел ниже. - person Abdullah Rasheed; 27.10.2015

Хотя у вас есть токен доступа и вы можете получить доступ ко всем своим данным podio, используя аутентификацию по имени пользователя и паролю , Аутентификация Podio основана на файлах cookie, поэтому, если ваш клиент не аутентифицируется через экран входа в систему веб-приложения podio, ваш клиент не сможет читать изображения непосредственно из веб-приложения. Ваш доступ будет заблокирован.

Решение

Если вы не аутентифицируетесь через клиент, но имеете доступ к API, вы можете загрузить необработанные данные изображения отсюда: https://api.podio.com/file/{{imgId}}/raw. Как только вы получите необработанные данные изображения, вы можете закодировать их в формат base64 и использовать URI данных в качестве src вашего <img> тега в вашем клиенте, если это веб-клиент.

person Abdullah Rasheed    schedule 27.10.2015