提示用户下载PDF文件而不是打开

7
在我的项目网站中,如果我点击链接,PDF会在新窗口或父窗口中打开。我希望出现一个提示框,提示用户下载文件,而不是打开它。
有没有人知道一个简单的JavaScript onClick事件,在所有浏览器中,使用默认设置实现此功能?
我的服务器是基于PHP的。
6个回答

14

由于您的编辑说明您正在使用PHP,因此以下是如何在PHP中执行相同操作的方法:

<?php
header('Content-type: application/pdf');
header('Content-Disposition: attachment; filename="downloaded.pdf"');
readfile('original.pdf');
?>

我想要在整个网站上启用此功能,而不是针对任何特定的PDF。 - Jitendra Vyas
1
最好也包括文件的大小,否则浏览器可能会在下载时显示“未知”的大小/剩余时间。header('Content-Length: 12345'); - Justin Jenkins

9

既然你标记了.NET,我认为这是最好的解决方案:

Response.ClearContent();
Response.ClearHeaders();
Response.ContentType = "application/pdf";
Response.AddHeader("Content-Disposition", "attachment;filename=download.pdf");
Response.WriteFile(Server.MapPath("~/files/myFile.pdf"));
Response.Flush();
Response.Close();

3
将Content-Type更改为application/octet-stream。但是,您可能会发现一些浏览器根据文件扩展名推断它应该使用您最喜欢的PDF查看器打开。
Response.ContentType = "application/octet-stream";

此外,请设置以下内容:
Response.AppendHeader( "content-disposition", "attachment; filename=" + name );

1

1

2
Response.AppendHeader("content-disposition", "attachment; filename=" + name); - just somebody

0
如果你遇到了文件损坏的错误,请尝试以下方法:
header('Pragma: public');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Cache-Control: private', false);
header('Content-Type: application/pdf');
header('Content-disposition: attachment; filename=' . basename($file));
header("Content-Transfer-Encoding:  binary");
header('Content-Length: ' . filesize($file)); // provide file size
header('Connection: close');
readfile($file);

$file 是文件的完整路径或 URL。


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