Получить mp3 из MySQL и принудительно загрузить вместо воспроизведения в браузере - PullRequest
2 голосов
/ 30 августа 2010

У меня есть сайт с аудиофайлами в базе данных MySQL, все из которых доступны для воспроизведения.Это прекрасно работает при использовании заголовков:

header("Content-length:". $audioLength);
header("Content-type: ". $audioMime );


echo $audio;

Где $ audioLength и $ audioMime хранятся вместе с файлом в базе данных, а $ audio - это фактические данные.

Теперь я хочудобавьте ссылки для загрузки некоторых файлов большего размера, чтобы пользователям, которые не знают, как загрузить mp3 со страницы, на которую они могут это сделать, было бы совершенно очевидно, а также размещать музыку на своих устройствах и делиться ими любым другим способом.им нравится.Мой PHP такой же, за исключением того, что я заменил заголовки на:

header("Content-type: attachment/octet-stream");
header("Content-disposition: attachment; filename=" . $fileName);

echo $audio;

Это все еще заставляет Safari и Firefox воспроизводить аудио, просто в новом окне.Как заставить диалоговое окно загрузки?Я предполагаю, что большинство других браузеров также будут воспроизводить файл, поэтому я еще не тестировал их ...

M

ОК - я потрясающий идиот !!!Я создал файл PHP, который будет загружаться вместо воспроизведения из файла, который воспроизводит.И я забыл изменить ссылку на новый PHP-файл в URL к файлам, которые я извлекал.Brilliant.У меня была первая попытка, она просто не сработала, потому что я звонил не туда, ФАЙЛ.

Итак, для всех, у кого есть этот вопрос - вот что работает:

header('Content-Type: '.$audioMime);
header("Content-disposition: attachment; filename=" . $fileName);

echo $audio;

Та-да!

Давай, смейся надо мной и дай мне значок идиота дня.Я это заслужил.

М

Ответы [ 2 ]

1 голос
/ 30 августа 2010

Вместо header("Content-type: attachment/octet-stream");, попробуйте использовать header('Content-Type: application/octet-stream');.

. Вы также можете добавить следующий заголовок:

header ("Cache-Control: must-revalidate, post-check=0, pre-check=0");

0 голосов
/ 30 августа 2010

1) не отправлять другой тип контента.

2) синтаксис без кавычек работает, только если имя файла является токеном (как определено в MIME), например, оно не может содержать пробелы.

Если сомневаетесь, установите LiveHTTPHeaders в Firefox и опубликуйте то, что вы видите в сети.

...