2011-12-16 1 views
1

Мое приложение создает динамическую ссылку на любые файлы PDF, связанные с продуктом. Ссылка представлена ​​следующим образом:Как я могу заставить ссылку на PDF указать браузеру загрузить его в формате PDF?

<a href="http://mysite.net/mylink.pdf?uid=db5f3dc108594b34a86ad52c8686ade5%2FMyCompany&amp;expires=1324049275&amp;signature=jrSF87xtHkQDCTvOek6uuMacPRc%3D" target="_blank">Brochure</a> 

Если пользователь щелкает правой кнопкой мыши и выбирает «Download Linked File As» (или его эквивалент), файл представлен с «.pdf.png» расширение в Google Chrome и Safari. Firefox работает должным образом, не уверен в Internet Explorer.

Я хочу, чтобы Firefox и Chrome знали, что это PDF. Поскольку, очевидно, пользователи попытаются загрузить их, они собираются сохранить их с неправильным расширением, и они не смогут открыть файл.

ответ

3

Предполагая, что вы используете «send_data» внутри контроллера рельсов, чтобы служить файл могу предложить:

send_data(
    data, 
    :filename => "filename.pdf", 
    :disposition => "attachment", 
    :type => 'application/pdf' 
) 

Где «данные» - это содержимое PDF.

Для получения дополнительной информации проверки по следующей ссылке:

http://api.rubyonrails.org/classes/ActionController/DataStreaming.html#method-i-send_data

+0

Файл только что представлен link_to, но я полагаю, что смогу подключить его к действию – AKWF

+0

Возможно, вы захотите посмотреть: http://wiki.nginx.org/HttpHeadersModule в этом случае. Может добавить в расположение в конфиге – dmcnally

0

отправить соответствующие заголовки в некоторых сценариев языки, как PHP или пользователь .htaccess

<Files *.pdf> 
    ForceType application/pdf 
    Header set Content-Disposition attachment 
</Files> 
+0

я упомянул мой веб-сервер Nginx – AKWF

0

Вы слышали о заголовке содержимого диспозиции? Это позволяет вам рассказать браузеру, чтобы он спросил пользователя, что делать с файлом, а не пытаться обработать его сам по себе. Я не думаю, что это часть спецификации HTTP, но она документирована IETF под RFC 2183.

Вы должны иметь возможность использовать любой язык, который вы используете, чтобы изменять заголовки HTTP до того, как они отправятся на клиент. Заголовок добавления будет выглядеть примерно так:

Content-Disposition: attachment; filename=filename.pdf 

Вы можете также нуждаться в Content-Type заголовок:

Content-Type: application/pdf 
+0

Это Ruby On Rails приложения подается с Nginx. Я знаю заголовки Content- *, я просто не знаю, как проверить расширение файла или отправить его клиенту. – AKWF

+0

Я боюсь, что у меня нет никаких знаний о Ruby, но модуль HTTPHeader (http://www.ruby-doc.org/stdlib-1.9.2/libdoc/net/http/rdoc/Net/HTTPHeader.html) выглядит многообещающим. Изменил ваш вопрос с Ruby. –

Смежные вопросы