强制浏览器下载文件,而不是查看它
问题描述:
在我的网上我想要有两个按钮 - 第一个Download
,应该下载PDF到用户的计算机和另一个View
,打开PDF在一个新的选项卡。事情是,我不知道如何制作Download
按钮。你可能会说它是无用的,因为你可以在“查看”它后保存pdf,但是我已经制作了这样的图形,并且不想改变它。是否有可能阻止浏览器打开PDF文件并使其下载文件?强制浏览器下载文件,而不是查看它
答
您需要强制文件下载在你的服务器端脚本:
这里是一个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");
答
最后,因为我使用nginx的,我决定来解决这个位于http服务器级别:
location /media {
alias /srv/www/novacek/media/;
}
location /download/media {
alias /srv/www/novacek/media/;
add_header Content-Disposition "attachment";
}
很酷,你能否明确告诉我哪一行导致行为改变? – clime 2013-03-06 12:07:34
没有特定的行导致查看pdf文件。如果浏览器识别出您正在访问的文件的类型,那么它会自动尝试显示它,如果它不知道它是什么文件,那么它会要求您下载。使用我提供给你的这些代码行,强制下载并且浏览器不会尝试显示文件。 – 2013-03-06 12:32:46
Matei; HTTP中没有Content-Transfer-Encoding标头字段。此外,内容描述只是噪音。最后,需要引用使用正斜杠的文件名(请参阅RFC 6266),但UA无论如何都会丢弃路径信息,所以在首先发送它时没有意义。 clime:相关标题字段是Content-Disposition。 – 2013-03-06 22:22:55