【问题标题】:Is there a way to force the user to download a file from a href link rather than to open it in a browser window?有没有办法强制用户从 href 链接下载文件而不是在浏览器窗口中打开它?
【发布时间】:2010-10-01 17:24:38
【问题描述】:

基本上,我编写了一个脚本,该脚本根据用户输入生成一个 xml 文件。文件生成后,下载链接如下所示:

<a href="path/to/file.xml">Download File</a>

但是当点击它时,它会在浏览器中打开 xml,我希望它在点击链接时开始下载。有什么方法可以实现吗?

【问题讨论】:

标签: php javascript html


【解决方案1】:

是的,有。它确实需要指定一些标题。具体如何工作取决于您使用的语言,但这里有一个使用 php 的示例,取自 php.net:

<?php
// We'll be outputting a PDF
header('Content-type: application/pdf');

// It will be called downloaded.pdf
header('Content-Disposition: attachment; filename="downloaded.pdf"');

// The PDF source is in original.pdf
readfile('original.pdf');
?>

基本上,首先我们告诉客户端我们发送的是什么类型的文件,然后我们告诉客户端我们发送的是一个附件和它的名称,而不是一个要显示的页面,最后是我们将文件打印/读取到输出。

鉴于您已经在使用 php 生成 xml 文件,我建议将上面的标头命令添加到生成 xml 文件的代码中,看看是否可以解决问题。

【讨论】:

  • 请注意:在您的链接中,请确保执行target="_blank" 以便 IE 在新窗口中打开它,否则 IE 将不知道如何处理它(我们在这解决了IE6和7)...
【解决方案2】:

如果您碰巧将 Apache 用于您的 Web 服务器,并且您总是想强制下载 XML 文件,那么有一种更有效的方法来执行 @chigley 建议的操作。只需将以下内容添加到 .htaccess 文件中即可。

<Files *.xml>
ForceType application/xml
Header set Content-Disposition attachment
</Files>

【讨论】:

    【解决方案3】:

    当浏览器看到一个链接时会发生什么不依赖于链接,而是依赖于链接的目标。您的网络服务器应该发送适当的标头:Content-Disposition: attachment;filename="file.xml" 告诉浏览器它应该提示保存文件而不是显示它。

    【讨论】:

      【解决方案4】:

      这取决于客户端计算机如何处理 XML 文件。如果你双击一个 XML 文件,它可能会在你的浏览器中打开。

      【讨论】:

        【解决方案5】:

        下载.php:

        header('Content-Type: text/xml');
        header('Content-Disposition: attachment; filename="file.xml"');
        readfile('/path/to/file.xml');
        

        HTML:

        <a href="download.php">Download</a>
        

        【讨论】:

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