如何强制链接到PDF以告诉浏览器将其下载为PDF?

时间:2011-12-16 14:37:42

标签: html ruby-on-rails nginx anchor

我的应用程序生成指向与产品关联的任何PDF文件的动态链接。链接如下所示:

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

如果用户右键单击并选择“将链接文件下载为”(或其等效文件),则会在Google Chrome和Safari中向该文件显示“.pdf.png”扩展名。 Firefox工作正常,不确定Internet Explorer。

我希望Firefox和Chrome知道它是PDF。因为显然用户会尝试下载这些内容,他们将使用错误的扩展名保存它们,并且他们将无法打开该文件。

3 个答案:

答案 0 :(得分:3)

假设您在rails控制器中使用“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

答案 1 :(得分:0)

使用某些脚本语言(如php或用户.htaccess

)发送正确的标头
<Files *.pdf>
  ForceType application/pdf
  Header set Content-Disposition attachment
</Files>

答案 2 :(得分:0)

您是否听说过内容处置标题?它允许您告诉浏览器询问用户如何处理文件,而不是尝试自己处理它。我不认为它是HTTP规范的一部分,但IETF在RFC 2183下记录了它。

您应该能够使用您使用的任何语言在转到客户端之前更改HTTP标头。您添加的标题将如下所示:

Content-Disposition: attachment; filename=filename.pdf

您可能还需要Content-Type标头:

Content-Type: application/pdf