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

在我的项目网站中,如果点击链接,PDF将在新窗口或父窗口中打开。 那么我想要一个盒子出现,提示用户下载文件,而不是打开它。

有没有人知道一个简单的JavaScript onClick事件,将在所有浏览器中使用默认设置?

我的服务器是基于PHP的

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

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

既然你已经标记了.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(); 

将Content-Type更改为application / octet-stream。 但是,您可能会发现某些浏览器会从文件扩展名中推断出它应该以您最喜爱的PDF查看器的PDF格式打开。

 Response.ContentType = "application/octet-stream"; 

另外,设置以下内容:

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

你不能通过JavaScript来实现,你需要服务器端的实现。

这是SO帖子应该帮助:
允许用户通过Response.WriteFile()从我的网站下载

如果你得到一个损坏的文件错误尝试这个:

 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$file的完整路径或url