Проблема с загрузкой PDF из S3 на Chrome - PullRequest
6 голосов
/ 01 февраля 2012

У меня проблема с загрузкой PDF-файлов из Amazon S3 с помощью Chrome.

Когда я нажимаю на ссылку, мой контроллер перенаправляет запрос на URL файла на S3.

Он отлично работает с Firefox, но с Chrome ничего не происходит.

Тем не менее, если я выполню щелчок правой кнопкой мыши -> Сохранить местоположение как загрузит файл ...

И даже копирование-вставка URL-адреса S3 в Chrome приведет к появлению пустого экрана ...

Вот некоторая информация, возвращаемая curl:

Date: Wed, 01 Feb 2012 15:34:09 GMT
Last-Modified: Wed, 01 Feb 2012 04:45:24 GMT
Accept-Ranges: bytes
Content-Type: application/x-pdf
Content-Length: 50024
Server: AmazonS3

Мои предположения связаны с проблемой с типом контента ... но все, что я пробовал, не сработало.

Ответы [ 2 ]

7 голосов
/ 04 декабря 2012

Существует решение на основе HTML для этого. Поскольку Chrome обновлен до HTML5, мы можем использовать новый блестящий атрибут download!

<a href="http://www.domain.com/painful.pdf">Broken</a>
<a href="http://www.domain.com/painful.pdf" download="notsopainful">Works</a>

7 голосов
/ 01 февраля 2012

Канонический Интернет-тип мультимедиа для документа PDF на самом деле application/pdf, как определено в Приложение / pdf Тип мультимедиа (RFC 3778) - обратите внимание, что application/x-pdf, хотя обычно встречается и указывается в качестве типа носителя в Portable Document Format , в частности, отсутствует в официальных прикладных типах носителей , перечисленных Internet Assigned Numbers Authority (IANA) .

Я не знаю, почему и когда application/x-pdf ожил, но, очевидно, плагин Chrome PDF не открывает документы application / x-pdf на сегодняшний день.

Следовательно, вы должны иметь возможность вызывать другое поведение в Chrome, соответственно изменяя тип носителя хранимых объектов.

Альтернатива (для аутентифицированных запросов)

Другой подход заключается в том, чтобы принудительно загрузить PDF-файл вместо того, чтобы Chrome пытался открыть его, что можно сделать с помощью запуска заголовка Content-Diposition: attachment с помощью запроса GET - см. документация S3 для GET Object о том, как этого добиться с помощью параметра запроса response-content-disposition, в частности response-content-disposition=attachment, как показано в разделе Пример запроса с параметрами, изменяющими значения заголовка ответа .

Это доступно только для аутентифицированных запросов, см. Раздел Параметры запроса :

Примечание

Вы должны подписать запрос либо используя заголовок авторизации. или предварительно подписанный URL, при использовании этих параметров. Они не могут быть использованы с неподписанным (анонимным) запросом.

...