【问题标题】:force browser to download a file instead viewing it强制浏览器下载文件而不是查看它
【发布时间】:2013-02-21 05:02:35
【问题描述】:

在我的网络上,我想要两个按钮 - 第一个 Download 应该将 pdf 下载到用户的计算机,另一个 View 在新选项卡中打开 pdf。问题是,我不知道如何制作Download 按钮。您可能会说它没用,因为您可以在“查看”后保存 pdf,但我已经制作了这样的图形并且不想更改它。是否可以阻止浏览器打开pdf文件并使其下载文件?

【问题讨论】:

    标签: pdf browser


    【解决方案1】:

    您需要在服务器端脚本中强制下载文件:

    这是一个 PHP 示例:

    $file = "path/to/my-file.pdf";
    
    header("Cache-Control: public");
    header("Content-Description: File Transfer");
    header("Content-Disposition: attachment; filename=$file");
    header("Content-Type: application/pdf");
    header("Content-Transfer-Encoding: binary");
    

    【讨论】:

    • 酷,你能明确告诉我是哪一行导致行为改变吗?
    • 没有特定的行会导致查看 pdf 文件。如果浏览器识别出你正在访问的文件的类型,它会自动尝试显示它,如果它不知道它是什么文件,那么它会要求你下载。使用我给你的这些代码行,下载是强制的,浏览器不会尝试显示文件。
    • 马太; HTTP 中没有 Content-Transfer-Encoding 标头字段。此外,内容描述只是噪音。最后,需要引用使用正斜杠的文件名(参见 RFC 6266),但 UA 无论如何都会丢弃路径信息,因此首先发送它是没有意义的。 clime:相关的标头字段是 Content-Disposition。
    • 谢谢朱利安,这是很有用的评论。
    【解决方案2】:

    最后,当我使用 nginx 时,我决定在 http-server 级别解决这个问题:

    location /media  {
        alias /srv/www/novacek/media/;
    }
    
    location /download/media {
        alias /srv/www/novacek/media/;
        add_header Content-Disposition "attachment";
    }
    

    【讨论】:

      猜你喜欢
      • 2011-06-19
      • 1970-01-01
      • 2013-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-22
      • 2014-05-22
      相关资源
      最近更新 更多