我有一个托管在Amazon S3中的MPEG文件(.mpg),我想链接到我拥有的页面,因此用户可以从页面下载它。 我的页面中有一个链接: bla bla“
当我右键单击它并选择“目标另存为”时,该文件的链接有效,但是当我左键单击它时,我希望它也可以工作,并且它将打开文件下载对话框。现在,左键单击将指向直接在其中播放视频的页面(在FireFox中)或者只是不加载(在Internet Explorer中)。
我在PHP工作,为什么会这样?
答案 0 :(得分:2)
您可能希望将文件包装在“下载”PHP脚本中,该脚本会发送相应的Content-Disposition
标题,告知浏览器将其视为下载而不是内容项。
例如:
header("Content-Disposition: attachment; filename=yourfilenamehere.ext>");
答案 1 :(得分:1)
这适用于UTF-8文件名(假设您在名为$orfilename
的变量中有一个):
function detectUserAgent() {
if (!array_key_exists('HTTP_USER_AGENT', $_SERVER))
return "Other";
$uas = $_SERVER['HTTP_USER_AGENT'];
if (preg_match("@Opera/@", $uas))
return "Opera";
if (preg_match("@Firefox/@", $uas))
return "Firefox";
if (preg_match("@Chrome/@", $uas))
return "Chrome";
if (preg_match("@MSIE ([0-9.]+);@", $uas, $matches)) {
if (((float)$matches[1]) >= 7.0)
return "IE";
}
return "Other";
}
/*
* We have 3 options:
* - For FF and Opera, which support RFC 2231, use that format.
* - For IE and Chrome, use attwithfnrawpctenclong
* (http://greenbytes.de/tech/tc2231/#attwithfnrawpctenclong)
* - For the others, convert to ISO-8859-1, if possible
*/
$formatRFC2231 = 'Content-Disposition: attachment; filename*=UTF-8\'\'%s';
$formatDef = 'Content-Disposition: attachment; filename="%s"';
switch (detectUserAgent()) {
case "Opera":
case "Firefox":
$orfilename = rawurlencode($orfilename);
$format = $formatRFC2231;
break;
case "IE":
case "Chrome":
$orfilename = rawurlencode($orfilename);
$format = $formatDef;
break;
default:
if (function_exists('iconv'))
$orfilename =
@iconv("UTF-8", "ISO-8859-1//TRANSLIT", $orfilename);
$format = $formatDef;
}
header(sprintf($format, $orfilename));
答案 2 :(得分:-2)
在下载页面上执行以下操作
$filename = $_GET['movie']; //Get the filename
if(is_file($filename)) {
//If you want to read and output the contents do it here
header('Content-disposition: attachment; filename='.$filename);
}
exit();
这将告诉浏览器将其视为附件,从而强制下载框。