HTML - 在浏览器查看和强制下载中

时间:2014-04-27 23:15:12

标签: php html

在我正在处理的网站上,我希望为每次下载提供两个链接,"查看"和"下载"。大多数(如果不是全部)这些下载将是PDF格式。 View的目标是使文档在PDF插件/扩展名的浏览器中显示,而下载链接则强制下载到本地存储。

我以这种方式工作:

<div class="DownloadLinks">
    <a href="./images/services/example.pdf">View</a> 
    <a href="./images/services/example.pdf" download="">Download</a></div>
</div>

但是现在我想这样做(使用PHP来存储和检索文档)并且它不再起作用了:

<div class="DownloadLinks">
    <div class="DownloadLinks"><a href="./get_document.php?doc_id=3">View</a> 
    <a href="./get_document.php?doc_id=3" download="">Download</a></div>
</div>

我认为问题可能是浏览器没有在链接中看到文件扩展名因此执行下载而不是启动PDF插件。不幸的是,我只是使用内容管理系统而且我无法访问PHP脚本而且我无法更改任何内容。我怎样才能让它按预期工作?

2 个答案:

答案 0 :(得分:0)

由于你的CMS,我建议你只使用javascript。这是一个很好的功能。

var downloadURL = function downloadURL(url) {
    var hiddenIFrameID = 'hiddenDownloader', iframe = document.getElementById(hiddenIFrameID);
    if (iframe === null) {
        iframe = document.createElement('iframe');
        iframe.id = hiddenIFrameID;
        iframe.style.display = 'none';
        document.body.appendChild(iframe);
    }
    iframe.src = url;
};

这适用于下载脚本。如果你想使用php以便你也可以跟踪下载次数(或者那些东西),你可以使用AJAX。

答案 1 :(得分:0)

当您单击下载链接时,您需要将以下标题添加到get_document.php(您可能需要额外的GET参数来指示这一点):

header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.basename($file).'"');
header('Content-Length: ' . filesize($file));

其中$ file是文件的路径,您也可以手动替换名称和文件大小,但请确保名称包含正确的扩展名。

编辑,你说你无法访问CMS - HTTP服务器怎么样?或者它是托管服务?