我有一些大尺寸的PDF目录在我的网站上,我需要链接这些下载。当我在谷歌上搜索时,我发现下面有这样一件事。它应该打开“另存为…”弹出链接点击…

 <head>
    <meta name="content-disposition" content="inline; filename=filename.pdf">
    ...

但它不工作:/当我链接到一个文件如下,它只是链接到文件,并试图打开文件。

    <a href="filename.pdf" title="Filie Name">File name</a>

更新(根据以下答案):

据我所知,没有100%可靠的跨浏览器解决方案。也许最好的方法是使用下面列出的web服务之一,并提供下载链接…

http://box.net/ http://droplr.com/ http://getcloudapp.com/


当前回答

如果你在浏览器中有一个插件知道如何打开PDF文件,它会直接打开。比如图像和HTML内容。

因此,另一种方法是在响应中不发送MIME类型。这样,浏览器就永远不会知道哪个插件应该打开它。因此,它会给你一个保存/打开对话框。

其他回答

元标签并不是实现这一结果的可靠方法。一般来说,你甚至不应该这样做——应该由用户/用户代理来决定如何处理你提供的内容。如果用户愿意,总是可以强制浏览器下载文件。

如果您仍然希望强制浏览器下载文件,请直接修改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

请注意,这只是对HTTP协议的扩展;有些浏览器可能会忽略它。

只要把下面的代码放在你的。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

或者你也可以通过JavaScript来实现

element.setAttribute( 'download', whatever_string_you_want);

添加响应头Content-Disposition:附件;后面跟着文件名。删除Meta Content-Disposition;Inline;哪个会在同一个窗口中打开文档

在java中,它被设置为

response.setHeader("Content-Disposition", "attachment;filename=test.jpg");

使用download属性,但要考虑到它只适用于与您的代码位于同一源中的文件。这意味着用户只能下载来自源站点、同一主机的文件。

用原始文件名下载:

<a href="file link" download target="_blank">Click here to download</a>

用“some_name”作为文件名下载:

<a href="file link" download="some_name" target="_blank">Click here to download</a>

添加target="_blank",我们将使用一个新的标签,而不是实际的标签,而且它将有助于在某些情况下下载属性的正确行为。

它遵循与同源策略相同的规则。您可以在MDN Web Doc同源策略页面上了解有关此策略的更多信息

你可以在MDN Web Doc锚的属性页面上了解更多关于这个下载HTML5属性的信息。

我遇到了同样的问题,找到了一个迄今为止非常有效的解决方案。你把下面的代码放在你的。htaccess文件中:

<FilesMatch "\.(?i:pdf)$">
  ForceType application/octet-stream
  Header set Content-Disposition attachment
</FilesMatch>

它来自于强制文件下载而不是显示在浏览器中。