php - 如何创建不需要右键单击的 PDF 下载链接?

标签 php javascript html web download

我在一个网站上工作,访问者应该能够下载 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.pdfhttp://example.com/files/bar.zip,等等。

希望这对您有所帮助。

关于php - 如何创建不需要右键单击的 PDF 下载链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1878208/

相关文章:

php - 将 jQuery fullcalendar 集成到 PHP 网站中

javascript - 作为对象文字属性的自执行函数

javascript加法和减法表现得很奇怪

html - Bootstrap 全宽设计

php - 使用 PHP 中 RootElement 中的命名空间解析 XML

php - 在编辑器上更新 header.php 时 Wordpress 主题崩溃

javascript - 使用 where 时使用 toType 时出错

jquery - 有没有办法制作穿孔文本?

html - Bootstrap - 正确对齐多个元素

php - jquery ajax返回整页内容