我在一个网站上工作,访问者应该能够下载 pdf 文件。 (有三个链接可供选择,但那是无关紧要的) 我想知道如何制作它,以便访问者只需单击链接,而不必
right click > Save (target) As...
我对 PHP 和/或 Javascript 解决方案持开放态度。谢谢。
编辑:我可以使用 javascript 调用 PHP 并通过 AJAX 保存文件吗?
EDIT2:最后我使用了 Nirmal 的解决方案,因为更改所有三个文件最简单。我不需要为三个 PDF 创建 3 个文件,也不需要手动编写开关代码。 BalusC 得到了检查,因为他/她的代码首先启动并且也做了这个把戏。
最佳答案
您基本上需要做的就是设置 Content-Disposition
标题到 attachment
以获得“另存为”对话框。这是一个启动 PHP 示例:
<?php
header('Content-Type: application/pdf');
header('Content-Disposition: attachment;filename="foo.pdf"');
readfile('/path/to/foo.pdf');
?>
你不能也不想用 Javascript 做到这一点。
重要说明:由于功能不佳,在 MSIE 中,“另存为”对话框中的默认文件名不会从 content-disposition
header 中派生,而是请求 URL 中的路径信息。要解决此问题,请将 PDF 文件名附加到链接,例如http://example.com/pdf/foo.pdf
。您甚至可以在 PHP 中使用它来读取 pathinfo 中指定的 PDF 文件。下面是 pdf.php
的基本示例:
<?php
$file_name = $_SERVER['PATH_INFO'];
$file = '/path/to/pdf/files' . $file_name;
if (file_exists($file)) {
header('Content-Type: application/pdf');
header('Content-Disposition: attachment;filename="' . basename($file_name) . '"');
header('Content-Length: ' . filesize($file));
readfile($file);
} else {
header('HTTP/1.1 404 Not Found');
}
?>
然而,这假设您已打开 MultiViews
,以便 /pdf/
将遍历此 PHP 文件,或至少一个 RewriteRule
从 /pdf/
到 /pdf.php/
。
这种方法的主要优点是,无论何时您想要添加新的 PDF 文件或更改 PDF 文件名,都无需更改代码。
您甚至可以通过自动确定和设置正确的内容类型使其更通用:
<?php
$file_name = $_SERVER['PATH_INFO'];
$file = '/path/to/all/files' . $file_name;
if (file_exists($file)) {
header('Content-Type: ' . mime_content_type($file_name));
header('Content-Disposition: attachment;filename="' . basename($file_name) . '"');
header('Content-Length: ' . filesize($file));
readfile($file);
} else {
header('HTTP/1.1 404 Not Found');
}
?>
将其命名为 files.php
左右,然后您就有了一个通用的 PHP 下载器,您可以通过例如 http://example.com/files/foo.pdf
,http://example.com/files/bar.zip
,等等。
希望这对您有所帮助。
关于php - 如何创建不需要右键单击的 PDF 下载链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1878208/