为了账号安全,请及时绑定邮箱和手机立即绑定

如何使PDF文件在HTML链接中可下载?

/ 猿问

如何使PDF文件在HTML链接中可下载?

30秒到达战场 2019-07-16 18:18:58

如何使PDF文件在HTML链接中可下载?

我在我的网页上给出一个pdf文件的链接供下载,如下所示

<a href="myfile.pdf">Download Brochure</a>

问题是当用户单击此链接时

  • 如果用户已安装AdobeAcrobat,则会在AdobeReader的同一浏览器窗口中打开该文件。
  • 如果AdobeAcrobat未安装,则弹出用户以下载该文件。

但我希望它总是弹出到用户下载,无论是否安装了“Adobeacrobat”。

请告诉我怎么做?


查看完整描述

3 回答

?
jeck猫

而不是链接到.PDF文件,而是执行以下操作

<a href="pdf_server.php?file=pdffilename">Download my eBook</a>

它输出一个自定义的标题,打开PDF(二进制安全)并将数据打印到用户的浏览器,然后他们可以选择保存PDF,尽管他们的浏览器设置。pdf_server.php应该如下所示:

header("Content-Type: application/octet-stream");$file = $_GET["file"] .".pdf";header("Content-Disposition: 
attachment; filename=" . urlencode($file));   header("Content-Type: application/octet-stream");
header("Content-Type: application/download");header("Content-Description: File Transfer");            
header("Content-Length: " . filesize($file));flush(); // this doesn't really matter.$fp = fopen($file, "r");while (!feof($fp)){
    echo fread($fp, 65536);
    flush(); // this is essential for large downloads} fclose($fp);

PS:显然,对“file”变量进行一些正常检查,以防止人们窃取您的文件,例如不接受文件扩展名、拒绝斜杠、将.pdf添加到值中。


查看完整回答
反对 回复 2019-07-16
?
慕娘9325324

这是一个常见的问题,但很少有人知道有一个简单的HTML 5解决方案:

<a href="./directory/yourfile.pdf" download="newfilename">Download the pdf</a>

哪里newfilename用户保存文件的建议文件名。或者,如果您将文件名保持为空,则默认为服务器端上的文件名,如下所示:

<a href="./directory/yourfile.pdf" download>Download the pdf</a>

兼容性:我在Firefox 21和Iron上测试了它,两者都工作得很好。它可能不适用于HTML 5-不兼容或过时的浏览器。我测试过的唯一没有强制下载的浏览器是IE.

在这里检查兼容性:http://caniuse.com/#feat=download


查看完整回答
反对 回复 2019-07-16
?
至尊宝的传说

不要循环穿过每一行文件。使用读文件相反,它更快。这不在php站点上:http:/php.net/手册/en/function.readfile.php

$file = $_GET["file"];if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header("Content-Type: application/force-download");
    header('Content-Disposition: attachment; filename=' . urlencode(basename($file)));
    // header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    ob_clean();
    flush();
    readfile($file);
    exit;}

一定要净化你的GET变量,因为有人可以下载一些php文件.


查看完整回答
反对 回复 2019-07-16

添加回答

回复

举报

0/150
提交
取消
意见反馈 邀请有奖 帮助中心 APP下载
官方微信