有没有办法强制用户从href链接下载文件,而不是在浏览器窗口中打开它?

4

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

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

但是当它被点击时,它会在浏览器中打开xml文件,我希望在链接被点击时它能够开始下载。有没有办法实现这个功能呢?


5个回答

6

是的,有这个功能。需要指定一些标头。具体如何工作取决于您使用的语言,但这里是一个使用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文件的代码中,看看是否可以解决问题。


1
一个注意事项:在你的链接中,请确保添加 target="_blank",这样IE才会在新窗口中打开它,否则IE不知道该怎么处理它(我们在IE6和7中遇到过这个问题,这种方法解决了它)... - ircmaxell

1
如果您正在使用Apache作为Web服务器,并且希望始终强制下载XML文件,则有一种更有效的方法可以执行@chigley建议的操作。只需将以下内容添加到.htaccess文件中即可。
<Files *.xml>
ForceType application/xml
Header set Content-Disposition attachment
</Files>

0

download.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>

0

当浏览器看到一个链接时,它的行为并不取决于链接本身,而是取决于链接的目标。您的Web服务器应该发送适当的头信息:Content-Disposition: attachment;filename="file.xml",以告诉浏览器应该提示用户保存文件,而不是直接显示它。


0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接