Временный URL Amazon S3 к изображению работает в IE и Firefox, но не в Safari - PullRequest
3 голосов
/ 24 февраля 2009

Я использую Amazon S3 для размещения изображений. Область S3 является частной, поэтому я генерирую временный URL (используя Right AWS ) с 5-минутным сроком действия, чтобы позволить рендерингу изображения. URL выглядит следующим образом (примечание: URL ниже не будет работать):

https://mybucket.s3.amazonaws.com:443/attachments%2F30%2Fsmall.png?Signature=J%2BXzQd95myCNv0Re8arMhuTFSvk%3D&Expires=1235511662&AWSAccessKeyId=1K3MW21E6T8LWBY94C01

Это отлично работает, и я могу вставить URL в Firefox, и изображение отобразится. То же самое для IE. Тем не менее, когда я пытаюсь сделать это в Safari, URL-адрес разрешается, но изображение не отображается. Аналогичным образом, если я попытаюсь использовать URL-адрес в атрибуте src тега IMG на веб-странице, Safari ничего не отобразит (хорошо во всех других браузерах), например:

альтернативный текст http://lylo.co.uk/screenshot.png

Кто-нибудь видел такое поведение раньше, и можете ли вы указать, что, если что-то, я мог бы делать неправильно?

Ответы [ 2 ]

5 голосов
/ 24 февраля 2009

Немного покопавшись в библиотеке S3, которую я использую, я нашел здесь проблему.

Когда вы загружаете файл на S3, вы должны установить заголовок Content-Type. В моей ситуации я загружал два файла, один из которых представлял собой оригинальный файл PDF с типом содержимого application/pdf, другой - предварительный просмотр в формате PNG. Библиотека, которую я использовал для загрузки в S3, действительно устанавливает заголовок Content-Type, но для заголовка application/pdf он устанавливал как исходный PDF, так и миниатюру PNG.

Похоже, что Firefox и IE с радостью отобразят PNG-изображение с S3, даже если у него неправильный заголовок Content-Type, тогда как Safari это совсем не нравится и, следовательно, не будет отображать изображение.

Итак, исправление библиотеки S3, которую я использую таким образом, что правильный заголовок Content-Type правильно установлен на миниатюрах PNG, решило проблему.

Уф.

0 голосов
/ 24 февраля 2009

Ваш URL не распознается AWS:

...attachments%2F30%2Fsmall.png...

На самом деле должно читаться:

...attachments/30/small.png...

Firefox заменит все объекты в кодировке URL (до маркера запроса «?») На соответствующие им представления ASCII перед фактической отправкой запроса (т. Е. Firefox заменит %2F на / в пример выше), тогда как Safari не может. AWS, вероятно, ответит с HTTP 404 Safari при таких обстоятельствах.

Убедитесь, что ваш URL правильно сформирован для AWS. Внимательно изучите все различия между URL-адресом, который Firefox имеет в своей адресной строке после того, как изображение успешно получено, и URL-адресом, который Safari имеет в своей адресной строке после того, как изображение не может быть получен.

...