我一定要过一个密集的日子。我似乎无法弄清楚这一点。
我的网站上有一个页面,它应该强制下载msi文件,但是我希望保留页面的html以及下载说明。
到目前为止,我已经在html中尝试了以下标记(注意我只能访问此页面的正文)
<meta http-equiv="Refresh" content="0; URL=file.msi">
然而在Firefox中,这显示二进制文件为乱码文本。
接下来我尝试了下面的php插入
$file = "file.msi";
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 5');
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;
然而,这关闭了标签/窗口而没有离开安装说明。
最后,我在html中尝试了以下内容:
<META HTTP-EQUIV="Content-Type" CONTENT="application/octet-stream">
<meta http-equiv="content-disposition" content="attachment; filename=file.msi" />
但这拒绝下载该文件。 任何指针都非常感激。
答案 0 :(得分:0)
<meta>
标记适用于他们嵌入的页面。它们不会更改文件的下载方式,这被视为完全独立的页面。
您应该使用类似<a href="downloadmsi.php" target="_new" />download</a>
的内容,以便下载发生在与说明页面不同的窗口中。
答案 1 :(得分:0)
假设Apache,如果您想使用.htaccess
文件,可以添加以下内容:
AddType application/octet-stream .msi
根据this source。然后,您可以链接到该文件。
答案 2 :(得分:0)
我发现this link帮助我创建了一个链接到的PHP文件,指定要下载的.msi。第一次工作。
可见下载页面,downloads.php,也许
<a href="/downloads/?version=App.Installer.msi">download now</a>
上述href的Sever Processing Page,即example.com/downloads/index.php
$root = realpath($_SERVER["DOCUMENT_ROOT"]);
$file_dl = $_GET['version'];
header('Content-disposition: attachment; filename='.$file_dl);
header('Content-type: application/x-ole-storage');
readfile($root.'/downloads/'.$file_dl);
此外,不确定是否有必要,但我已根据Marc B
的建议添加到.htaccess文件中:AddType application/octet-stream .msi