(HTML) 当点击时下载 PDF 文件而不是在浏览器中打开它们

157
我想知道如何使PDF文件链接可下载而不是在浏览器中打开?在HTML中如何实现这一点?(我想这是通过JavaScript或其他方式完成的)。

4
据我所知,这种行为不可编写脚本。大多数浏览器都有自己的设置,用于控制下载特定文件类型时的行为。 - Bart
1
从HTML5开始,OP应该将正确答案更新为Sarim的答案。 - Omar Tariq
这个问题在这里也得到了回答: https://dev59.com/znA75IYBdhLWcg3w1sz2#30714824 - intrepidis
16个回答

2
我觉得最适合我的解决方案是Nick在他的博客上写的
他的解决方案的基本思路是使用Apache服务器的头部模块,并编辑.htaccess文件以包含一个FileMatch指令,使所有*.pdf文件都作为流而不是附件。虽然这实际上并不涉及编辑HTML(原始问题),但它不需要任何编程技巧。
我更喜欢Nick的方法的第一个原因是它允许我按文件夹设置,这样同一文件夹中的PDF文件仍然可以在浏览器中打开,而允许其他文件(我们希望用户编辑并重新上传的文件)被强制下载。
我还想补充一点,PDF文件有一个选项可以通过API将可填写表单提交到您的服务器,但这需要一些时间来实现。
第二个原因是时间问题。编写一个PHP文件处理程序来强制内容配置在header()中也比API花费更少的时间,但仍需要比Nick的方法更长的时间。
如果您知道如何启用Apache mod并编辑.htaccess文件,则大约可以在10分钟内完成此操作。这需要Linux托管(而不是Windows)。这可能不是所有用途的适当方法,因为它需要高级服务器访问权限来进行配置。因此,如果您拥有这样的访问权限,那么很可能是因为您已经知道如何执行这两个操作。如果没有,请查看Nick的博客以获取更多说明。

1

行为应该取决于浏览器如何设置处理各种 MIME 类型。在这种情况下,MIME 类型是 application/pdf。如果您想强制浏览器下载文件,可以尝试在 PDF 文件上强制使用不同的 MIME 类型。我建议不要这样做,因为用户应该选择打开 PDF 文件时会发生什么。


1

0

@Aljohn Yamaro

function forceDownload(pdf_url, pdf_name) {
    var x = new XMLHttpRequest();
    x.open("GET", pdf_url, true);
    x.responseType = 'blob';
    x.onload = function(e){
        saveAs(x.response, pdf_name, 'application/pdf');
    };
    x.send();
}

0
如果您正在使用HTML5(我猜现在每个人都在使用),那么有一个名为“download”的属性。
例如:<a href="somepathto.pdf" download="filename"> 这里的filename是可选的,但如果提供,它将用作下载文件的名称。

很遗憾,我必须承认我太蠢了,无法理解这个标签。我尝试使用这个:<a href="download/Curriculum_it.pdf.zip">下载课程</a> 或者这个:<a href="download/Curriculum_it.pdf.zip" download="Curriculum_it">下载课程</a>,但是我完全看不出它们之间的区别。两个都下载我的 .zip 文件。而在第二个选项中,使用文件名选项似乎根本没有任何作用。 - Garavani

0
你可以添加以下代码。

<a href='http://v2.immo-facile.com/catalog/admin-v2/product_info.pdf' class='btnPdf' title='pdf'  target='_blank' type='application/pdf' >Télécharger la fiche du bien</a>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接