2010-05-17 168 views
0

我有一个在Amazon S3中托管的MPEG文件(.mpg),我想链接到我拥有的页面,因此用户将能够从该页面下载它。 我在我的页面的链接: bla blaPHP:打开文件下载对话框

该文件的链接的作品,当我用鼠标右键单击它并选择‘目标另存为’,但我想它也是在工作的时候左键单击它,并且它会打开一个文件下载对话框,现在,左键单击将直接进入一个页面,该页面中有直接播放的视频(在FireFox中)或者只是不会加载(在Internet Explorer中)

I我正在使用PHP,为什么会发生这种情况?

回答

2

您可能想要将文件封装在“下载”PHP脚本中,该脚本会发送相应的Content-Disposition标题,告诉浏览器t o把它当作下载而不是内容项目。

例如:

header("Content-Disposition: attachment; filename=yourfilenamehere.ext>"); 

http://support.microsoft.com/kb/260519

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

在下载页面做以下

$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(); 

这会告诉浏览器将此视为附件,从而强制下载框。