从mySQL中检索mp3并强制下载而不是在浏览器中播放

时间:2010-08-29 21:07:19

标签: php http download mp3

我在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播放音频,只需在新窗口中播放。如何强制下载对话框?我假设那里的大多数其他浏览器也会播放该文件,所以我还没有测试过那些......

中号

好的 - 我是一个爆破的白痴!!!我创建了PHP文件,可以从播放的文件中下载而不是播放。我忘记更改我正在检索的文件的URL中的新PHP文件的引用。辉煌。我第一次尝试它,它只是没有工作,因为我正在调用错误的文件。

所以,对于任何有这个问题的人来说 - 这是有效的:

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

echo $audio;

钽哒!

来吧,嘲笑我,给我一天白痴徽章。我应得的。

中号

2 个答案:

答案 0 :(得分:1)

而不是header("Content-type: attachment/octet-stream");,请尝试使用header('Content-Type: application/octet-stream');

您可能还想添加以下标题:

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

答案 1 :(得分:0)

1)不要发送不同的内容类型。

2)如果文件名是一个令牌(如MIME中所定义),则不带引号的语法才有效,例如,它不能包含空格。

有疑问,在Firefox中安装LiveHTTPHeaders并发布您在线上看到的内容。