2009-11-26 81 views
7

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

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

我的服务器是基于PHP的。

回答

13

由于您使用PHP你的编辑状态,在这里是如何做相同的PHP:

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

我想在网站上为所有的PDF文件启用此功能,而不是针对任何特定的pdf – 2009-11-27 10:10:49

+0

感谢队友 - 这有帮助! – foxybagga 2011-10-20 20:44:41

+1

包含文件大小也是有帮助的,或者浏览器可能会说出一些“未知”的大小/时间来下载。 'header('Content-Length:12345');' – 2012-08-04 07:38:45

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查看器的PDF格式打开。

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

而且,设置如下:

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

我需要一个网站上的所有pdf – 2009-11-26 16:02:45

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是完整的路径或网址的文件。

相关问题