2010-05-17 3 views
0

У меня есть файл MPEG (.mpg), размещенный в Amazon S3, который я хочу связать со страницей, которую я имею, поэтому пользователь сможет загрузить ее со страницы. меня в моей странице ссылку: bla bla "PHP: открыть диалоговое окно загрузки файла

Ссылка на файл работает, когда я правой кнопкой мыши и выберите„Сохранить объект как“, но я хотел бы, чтобы работать и когда я левой кнопкой мыши его, и что он откроет диалоговое окно загрузки файлов. Прямо сейчас левый клик будет перенаправляться на страницу, на которой непосредственно воспроизводится видео (в FireFox) или просто не загружается (в Internet Explorer).

I я работаю в PHP, почему это происходит?

ответ

2

Возможно, вы захотите обернуть файл в «загружаемый» PHP-скрипт, который отправляет соответствующий заголовок , сообщающий браузеру 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(); 

Это позволит браузеру рассматривать это как вложение, тем самым вызывая загрузку.