Загрузить изображение для HTML-элемента img из свойства JSON, в то время как URL-адрес недоступен напрямую

Хорошо, это довольно сложно объяснить, что объясняет подробное название: В моем приложении Objective C я генерирую строку JSON для хранения всех моих свойств для объектов, которые мне нужно рисовать в браузере ARchitect SDK wikitude (насколько насколько я знаю, Wikitude SDK обрабатывает только JSON) через:

NSString *javaScript = [self convertPoiModelToJson:self.poiData.pois];
NSString *javaScriptToCall = [NSString stringWithFormat:@"newData('%@')", javaScript];

Один конкретный объект, который меня интересует, хранится в виде строки в этой строке JSON, это URL-адрес изображения. Однако это изображение находится за защищенной паролем областью на нашем веб-сервере, и приложение выполняет аутентификацию.

Проблемы начинаются, когда я нахожусь в браузере ARchitect, который в основном представляет собой файл .html с вызовами определенных функций javascript Wikitude для создания мира дополненной реальности и отображения его в UIWebView в приложении. Я хочу показать это изображение, когда POI в расширенном представлении щелкнут во всплывающем окне нижнего колонтитула, которое представляет собой базовый html-контейнер div. Итак, теперь у меня есть URL-адрес ресурса изображения на веб-сервере, к которому я не могу получить прямой доступ с помощью

document.getElementById("thumb").src = jsonObject.thumbUrl;

из-за необходимости аутентификации, и единственный способ, которым мне удалось загрузить это изображение, - это метод var poiImage = new AR.ImageResource(jsonObject[i].iconURL, {onError: errorLoadingImage});, но тогда я могу отобразить его только в расширенном представлении, но не в нижнем колонтитуле.

Я попробовал это с предоставлением статической строки из какого-либо другого изображения в Интернете или на локальных ресурсах в элемент img в разделе нижнего колонтитула в представлении без таких проблем: document.getElementById("thumb").src="marker.png"; и он работает нормально, также изображение правильно загружается в расширенном Посмотреть.

Я читал о кодировании изображения (к которому я могу получить доступ и загрузить в целевой части c приложения) в base64 и сохранить эту строку в дополнительном свойстве JSON, чтобы загрузить ее в свойство src элемента html img с <img src="data:image/png;base64,BASE&$_ENCODED_DATA"></img>, но это кажется действительно грязным и чрезмерно непрактичным обходным путем / взломом для того, что я пытаюсь выполнить. Также я не знаю, лучше ли начать читать о том, как реализовать аутентификацию для доступа к этому изображению в защищенной области веб-сервера, или, скорее, начать внедрять уродливую кодировку base64 или продолжить поиск альтернатив.

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

Благодарю вас!

Краткое содержание:

  • изображение доступно и загружено в объективной части c
  • изображение доступно с помощью метода AR.ImageResource SDK wikitude (но не требуется)
  • к изображению нельзя получить доступ напрямую через URL-адрес из javascript, потому что требуется аутентификация

(Надеюсь, мой вопрос понятен, не стесняйтесь спрашивать, если что-то неясно, тем более, что английский не мой родной язык, и объяснить это на немецком было бы даже сложно..)


person hreimer    schedule 04.10.2012    source источник


Ответы (3)


Пробовали ли вы загрузить изображение в Objective-C/Cocoa, сохранить его локально на вашем устройстве iOS и передать локальный путь к изображению через JSON в свой Architect World?

Затем вы можете загрузить локальное изображение с вашим AR.ImageResouce и контейнером div.

person Andreas Schacherbauer    schedule 08.10.2012
comment
это то, что я, наконец, сделал, так как это был самый простой и самый передовой подход без предоставления общедоступного места на веб-сервере для хранения изображений или повторной аутентификации, или использования грязных взломов двоичного потока или даже повторной загрузки изображения. - person hreimer; 09.10.2012

Хорошо, давайте немного подумаем об этом, так как это похоже на хороший беспорядок.

Если я хорошо понимаю вашу проблему, все дело в том, что ваш код javascript должен получить URL-адрес, по которому находится изображение, но не может этого сделать, потому что для доступа к этому месту требуется какая-то проверка.

В этом сценарии я бы искал перемещение изображений в место за пределами сайта с ограниченным доступом. Возможно, пытаясь сохранить их из части Objective-C в одно общедоступное место, доступное с помощью javascript. Это может быть сложно, поскольку операция ввода-вывода может замедлить выполнение вашего кода... Конечно, у вас всегда будет возможность переместить эти изображения за пределы restricted области, но я полагаю, что это невозможно. как вы могли предположить, что решение самостоятельно.

Другой способ... если конфигурация вашей среды позволяет это (боюсь, что по этому вопросу недостаточно информации об этом) - это попытаться выполнить вашу часть javascript (интересно, заключена ли она в веб-страницу, выполняемую с веб-сервера) с помощью пользователя с разрешениями в ограниченную область. Это, конечно, может быть полностью запрещено, в зависимости от того, что делает ваша часть javascript и почему ваша ограниченная область защищена проверкой.

Если вы не хотите перемещать файлы, скопируйте их временно, это приведет к проблемам с производительностью и ошибкам, а олицетворение пользователя через пользователя, выполняющего javascript, не вариант. Я боюсь, что ваша единственная альтернатива - эффективно попытаться передать двоичный поток данных с помощью изображение через строку JSON... грязное...

person Bardo    schedule 04.10.2012
comment
вы задаетесь вопросом, находится ли часть javascript на веб-странице на веб-сервере, что дало мне идею разместить ее на нашем сервере в зоне ограниченного доступа, чтобы разрешить доступ к изображениям, поскольку сейчас она находится просто в статическом html файле.. буду держать вас в курсе - person hreimer; 08.10.2012
comment
Вероятно, вашим пользователям потребуется использовать имя пользователя/пароль для доступа к html-файлу на сервере, если только вы не разрешите анонимный доступ к нему или ваши пользователи уже не вошли в зону ограниченного доступа. - person Bardo; 08.10.2012

Похоже, что wikitude поддерживает 2 контекста браузера: основной браузер, который загрузил ваш HTML, и встроенный объект, подобный браузеру (или iframe, или прокси-сервер), представленный экземпляром UIWebView.

Только один из них (неясно, какой из вашего обсуждения) имеет пользователя/пароль для доступа к вашему изображению. Вам нужно будет что-то вызвать, чтобы повторить этап аутентификации или передать учетные данные в другой контекст.

person Magicianeer    schedule 04.10.2012