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

时间:2009-11-26 15:49:09

标签: php javascript apache

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

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

我的服务器是基于PHP的。

6 个答案:

答案 0 :(得分:13)

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

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

答案 1 :(得分: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();

答案 2 :(得分:3)

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

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

另外,请设置以下内容:

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

答案 3 :(得分:1)

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

这是SO帖子应该有所帮助:
Allowing user to download from my site through Response.WriteFile()

答案 4 :(得分:1)

答案 5 :(得分: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是文件的完整路径或网址