des*_*ing 162 html pdf download content-disposition meta-tags
我的网站上有一些大尺寸的PDF目录,我需要将它们作为下载链接.当我用Google搜索时,我发现下面有这样的事情.它应该在链接点击时打开" 另存为... "弹出窗口...
<head>
<meta name="content-disposition" content="inline; filename=filename.pdf">
...
Run Code Online (Sandbox Code Playgroud)
但它不起作用:/当我链接到如下文件时,它只链接到文件,并试图打开该文件.
<a href="filename.pdf" title="Filie Name">File name</a>
Run Code Online (Sandbox Code Playgroud)
更新(根据以下答案):
我认为没有100%可靠的跨浏览器解决方案.可能最好的方法是使用下面列出的一个Web服务,并提供下载链接...
Ayu*_*pta 252
从单击链接后强制浏览器保存文件的答案:
<a href="path/to/file" download>Click here to download</a>
Run Code Online (Sandbox Code Playgroud)
DrW*_*aky 78
<a href="file link" download target="_blank">Click here to download</a>
Run Code Online (Sandbox Code Playgroud)
它适用于Firefox和Chrome.
Kar*_*nek 33
元标记不是实现此结果的可靠方法.通常,您甚至不应该这样做 - 应由用户/用户代理决定如何处理您提供的内容.用户可以随时强制他们的浏览器下载文件.
如果您仍想强制浏览器下载文件,请直接修改HTTP标头.这是一个PHP代码示例:
$path = "path/to/file.pdf";
$filename = "file.pdf";
header('Content-Transfer-Encoding: binary'); // For Gecko browsers mainly
header('Last-Modified: ' . gmdate('D, d M Y H:i:s', filemtime($path)) . ' GMT');
header('Accept-Ranges: bytes'); // Allow support for download resume
header('Content-Length: ' . filesize($path)); // File size
header('Content-Encoding: none');
header('Content-Type: application/pdf'); // Change the mime type if the file is not PDF
header('Content-Disposition: attachment; filename=' . $filename); // Make the browser display the Save As dialog
readfile($path); // This is necessary in order to get it to actually download the file, otherwise it will be 0Kb
Run Code Online (Sandbox Code Playgroud)
请注意,这只是HTTP协议的扩展; 有些浏览器可能会忽略它.
小智 22
我遇到了同样的问题,并找到了迄今为止效果很好的解决方案.您将以下代码放在您的.htaccess
文件中:
<FilesMatch "\.(?i:pdf)$">
ForceType application/octet-stream
Header set Content-Disposition attachment
</FilesMatch>
Run Code Online (Sandbox Code Playgroud)
它来自强制下载文件而不是在浏览器中显示.
我找到了一个非常简单的Firefox解决方案(仅适用于相对而不是直接href):添加type="application/octet-stream"
:
<a href="./file.pdf" id='example' type="application/octet-stream">Example</a>
Run Code Online (Sandbox Code Playgroud)
小智 7
我刚用过这个,但我不知道它是否适用于所有浏览器。
它适用于 Firefox:
<a href="myfile.pdf" download>Click to Download</a>
Run Code Online (Sandbox Code Playgroud)
小智 6
尝试将此行添加到.htaccess文件中.
AddType application/octet-stream .pdf
Run Code Online (Sandbox Code Playgroud)
我希望它能够工作,因为它独立于浏览器.
通常它会发生,因为某些浏览器设置或插件直接在同一个窗口中打开PDF,就像一个简单的网页.
以下内容对您有所帮助.几年前我用PHP完成了它.但目前我还没有在那个平台上工作.
<?php
if (isset($_GET['file'])) {
$file = $_GET['file'];
if (file_exists($file) && is_readable($file) && preg_match('/\.pdf$/',$file)) {
header('Content-type: application/pdf');
header("Content-Disposition: attachment; filename=\"$file\"");
readfile($file);
}
}
else {
header("HTTP/1.0 404 Not Found");
echo "<h1>Error 404: File Not Found: <br /><em>$file</em></h1>";
}
?>
Run Code Online (Sandbox Code Playgroud)
将上面保存为download.php.
将这个小片段保存为服务器上的某个PHP文件,您可以使用它在浏览器中下载文件,而不是直接显示.如果要提供PDF以外的文件,请删除或编辑第5行.
您可以像这样使用它:
将以下链接添加到HTML文件中.
<a href="download.php?file=my_pdf_file.pdf">Download the cool PDF.</a>
Run Code Online (Sandbox Code Playgroud)
参考来自:这个博客
实现此目的的一种非常简单的方法,无需使用外部下载站点或修改标题等,只需创建一个包含 PDF 的 ZIP 文件,然后直接链接到 ZIP 文件。这将始终触发“保存/打开”对话框,并且人们仍然可以轻松地双击与 .zip 关联的程序启动的 PDF 窗口。
顺便说一句,好问题,我也在寻找答案,因为大多数浏览器嵌入的 PDF 插件需要很长时间才能显示任何内容(并且通常会在加载 PDF 时挂起浏览器)。
只需将以下代码放入.htaccess
文件中:
AddType application/octet-stream .csv
AddType application/octet-stream .xls
AddType application/octet-stream .doc
AddType application/octet-stream .avi
AddType application/octet-stream .mpg
AddType application/octet-stream .mov
AddType application/octet-stream .pdf
Run Code Online (Sandbox Code Playgroud)
或者您也可以通过JavaScript来欺骗
element.setAttribute( 'download', whatever_string_you_want);
Run Code Online (Sandbox Code Playgroud)
如果您的浏览器中有知道如何打开 PDF 文件的插件,它将直接打开。就像图像和 HTML 内容一样。
因此,另一种方法是不在响应中发送您的 MIME 类型。这样浏览器将永远不知道哪个插件应该打开它。因此,它会给您一个保存/打开对话框。