2014-09-01 5 views
0

На моем сайте фотографии я храню фотографии на Amazon S3. Чтобы отображать их на веб-сайте, я использую подписанные URL-адреса. Это означает, что URL-адреса изображений истекают. Только сам веб-приложение может создавать правильные URL-адреса файлов изображений.Как реализовать безопасные XML-адреса Amazon S3?

Пример URL будет выглядеть следующим образом:

http://media.jungledragon.com/images/1849/21346_small.JPG?AWSAccessKeyId=05GMT0V3GWVNE7GGM1R2&Expires=&Signature=9MMO3zEXECtvB0w%2FuMEN8obt1ow%3D

Обратите внимание, что к тому времени, когда Вы читаете это, что URL может иметь уже истек. Все в порядке, вопрос о формате.

Несмотря на то что указанный выше URL-адрес отлично работает на веб-сайте, он разбивает файлы XML. Причиной этого является символ &, который должен быть экранирован.

Например, я пытаюсь реализовать живые фрагменты Windows 8.1 для веб-сайта, который вы можете связать с RSS-каналом. Мой RSS фид здесь:

http://www.jungledragon.com/all/rss/promoted

что канал будет работать в большинстве RSS читателей, однако, Windows 8 плитка строитель (http://www.buildmypinnedsite.com/en) особенно строги о XML является действительным. Здесь вы можете увидеть ошибку он бросает на подающий:

http://notifications.buildmypinnedsite.com/?feed=http://www.jungledragon.com/all/rss/promoted&id=1

Теперь, мое простое мышление кодировать &, которые являются частью подписанной URL-адресов, по & или &. Хотя это может сделать XML действительным, к сожалению, S3 не принимает & для кодирования. При использовании этого изображения изображение больше не будет загружаться.

Мне интересно, есть ли у меня круговая проблема, которая не может быть решена?

ответ

0

У меня было много подобных проблем с RSS-каналами. Документы XML всегда должны использовать & (или эквивалент, такой как & или &). Если читатель не способен правильно извлечь URL-адрес, читатель является виновником, а не вы. Но я могу сказать, что читатели-программисты не согласятся с вами.

Если вы программист, вы можете исправить проблему, перенаправив ее, но это немного работает. Таким образом, вы получите URL-адрес с S3, сохраните его в своей базе данных и создайте URL-адрес на своем веб-сайте, например http://www.jungledragon.com/images/123, и свяжите URL-адрес S3 со страницами изображений/123. Теперь, когда кто-то идет на образы страниц/123, вы извлекаете URL-адрес, который вы сохранили с вашего S3-сервера.

Фактически, если URL-адрес http://www.jungledragon.com/images/123 является ссылкой на ваше изображение, вы можете получить URL-адрес S3 в это время и сделать переадресацию на лету!