PHP: открыть диалоговое окно загрузки файла

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

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

Я работаю на PHP, почему это происходит?

Вероятно, вы захотите обернуть файл в «загружаемый» PHP-скрипт, который отправляет соответствующий заголовок Content-Disposition сообщающий браузеру рассматривать его как загрузку вместо элемента контента.

Например:

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

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

Это будет работать с именами файлов 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)); 

На странице загрузки выполните следующие

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

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