首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使PDF文件在HTML链接中可下载?

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

Stack Overflow用户
提问于 2008-12-13 07:09:26
回答 14查看 699.7K关注 0票数 132

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

代码语言:javascript
复制
<a href="myfile.pdf">Download Brochure</a>

问题是当用户点击这个链接时

  • 如果用户已安装Adobe Acrobat,则会在Adobe Reader的同一浏览器窗口中打开文件。
  • 如果未安装Adobe Acrobat,则会弹出窗口,供用户下载文件。

但我希望它总是弹出给用户下载,无论是否安装了"Adobe acrobat“。

请告诉我怎么做?

EN

回答 14

Stack Overflow用户

回答已采纳

发布于 2008-12-13 07:18:13

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

代码语言:javascript
复制
<a href="pdf_server.php?file=pdffilename">Download my eBook</a>

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

代码语言:javascript
复制
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添加到值中

票数 118
EN

Stack Overflow用户

发布于 2013-06-09 23:46:50

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

代码语言:javascript
复制
<a href="./directory/yourfile.pdf" download="newfilename">Download the pdf</a>

其中,newfilename是建议用户保存文件的文件名。或者,如果保留为空,它将默认为服务器端的文件名,如下所示:

代码语言:javascript
复制
<a href="./directory/yourfile.pdf" download>Download the pdf</a>

兼容性:我在Firefox21和Iron上进行了测试,两者都工作得很好。它可能无法在HTML5不兼容或过时的浏览器上工作。我测试的唯一没有强制下载的浏览器是IE……

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

票数 230
EN

Stack Overflow用户

发布于 2011-11-14 21:35:59

不要让遍历每一个文件行。改为使用读取文件,这样会更快。这不在php网站上:http://php.net/manual/en/function.readfile.php

代码语言:javascript
复制
$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文件...

票数 50
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/364946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档