загрузка файлов с типом аудио / mpeg mime - PullRequest
0 голосов
/ 03 сентября 2011

Я пытаюсь загрузить remote mp3 файлы с типом mime аудио / mpeg вместо щелчка правой кнопкой мыши по ссылке и сохранения как.Я попытался изменить тип содержимого заголовка с заголовками php, а затем вызвать файл с помощью readfile ().Это сработало очень хорошо, но из-за команды readfile () файлы вышли из полосы пропускания моего сервера.Есть ли другой способ изменить заголовок без затрат на пропускную способность?я могу определить, как браузер обрабатывает с типом контента с помощью JavaScript?У кого-нибудь была такая же проблема?

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 03 сентября 2011

Используя mime-тип audio / mpeg, вы говорите браузеру «выполнить действие по умолчанию с этим файлом». Например, если у вас есть файл jpg и установлен тип mime для изображения / jpeg, браузер прочитает файл jpg и отобразит его в окне браузера.

Решение состоит в том, чтобы вместо этого использовать приложение / данные mime-типа. Это позволит загрузить файл, оставив браузер вне его.

Это было бы

header("Content-type: application/data");

== Обновлено ==

Более полный подход

header("Content-type: application/data");
header("Content-Disposition: attachment; filename=$this->filename");
header("Content-Description: PHP Generated Data");
readfile($this->file);

Если вам нужен динамический читатель MIME, вы можете использовать это

$type = $this->get_mime_type($this->filename);
header("Content-type: " . $type);

...

private function get_mime_type($filename) {

    $fileext = substr(strrchr($filename, '.'), 1);

    if (empty($fileext)) {
        return (false);
    }

    $regex = "/^([\w\+\-\.\/]+)\s+(\w+\s)*($fileext)/i";
    $lines = file("mime.types", FILE_IGNORE_NEW_LINES);

    foreach ($lines as $line) {
        if (substr($line, 0, 1) == '#') {
            continue; // skip comments
        }

        if (!preg_match($regex, $line, $matches)) {
            continue; // no match to the extension
        }

        return ($matches[1]);
    }
    return ("application/data");  // no match at all, revert to something that will work
}

И, чтобы получить список типов пантомимы, вы можете проверить версию моей лаборатории, сохранить отображаемое содержимое и сохранить его в файле с именем mime.types в корневом каталоге вашего сайта.

http://www.trikks.com/lab/mime.html

Веселись

0 голосов
/ 03 сентября 2011

Я думаю, что вам нужно сделать следующее:

$pathOfAudioFile = '/path/to/my/file.mp3';

header('Content-Type: audio/mpeg');
header('Content-Length: '.filesize($pathOfAudioFile));

// This next line forces a download so you don't have to right click...
header('Content-Disposition: attachment; filename="'.basename($pathOfAudioFile).'"');

readfile($pathOfAudioFile);

Использование Content-Disposition: attachment... заставляет появиться окно загрузки вместо необходимости щелкнуть правой кнопкой мыши -> сохранить цель как.

...