0

所以我正在生成 mp3 文件,它工作正常,因为当我下载它时,我可以很好地播放它,但现在我想做的是将该文件输出到我的浏览器并在我的浏览器中播放,所以我尝试的是:

header("Pragma: no-cache");
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Content-Type: audio/mepeg');
header("Content-Disposition: attachment; filename=\"validate.mp3\"");
header("Content-Transfer-Encoding: binary");
header("Content-length: $size");

<embed autoplay="true" height="0" width="0" src="actions/play_file"  />

当然 id 不起作用,它只是强制下载该文件,因为我已经使用过

"Content-Disposition: attachment; filename=\"validate.mp3\"")

我很确定我是否为此使用了正确的 html 标签?但如果我是,我所需要的只是正确的标题来完成这项工作。

4

3 回答 3

1

这是一种提供文件的方法:

header("Content-type: audio/mpeg");
header("Content-length: " . filesize($file));
header("Cache-Control: no-cache");
header("Content-Transfer-Encoding: binary"); 
readfile($file);

或成块

$total     = filesize($filepath);
$blocksize = (2 << 20); //2M chunks
$sent      = 0;
$handle    = fopen($filepath, "r");

// Push headers that tell what kind of file is coming down the pike
header('Content-type: '.$content_type);
header('Content-Disposition: attachment; filename='.$filename);
header('Content-length: '.$filesize * 1024);

// Now we need to loop through the file and echo out chunks of file data
// Dumping the whole file fails at > 30M!
while($sent < $total){
    echo fread($handle, $blocksize);
    $sent += $blocksize;
}

exit(0);
于 2012-09-27T16:57:12.367 回答
1

您要做的重要事情是指定Content-Type标题。浏览器(或其他用户代理)用它做什么取决于他们,而不是你。您现在使用的内容类型不正确。使用audio/mpeg.

让它始终播放的唯一方法是在网页上包含一个播放器。为此,您可以使用 HTML5 音频标签、Flash、嵌入等。

于 2012-09-27T17:04:12.463 回答
0

......然而......另一种更简单的方法......自从一家名为 Ivona 的波兰公司于 2013 年 1 月 24 日被亚马逊收购的那一刻起,我就测试了这种方法,因此证明它是可行的在设置您的 AWS Polly 凭证之后,该框的。

    header('Accept-Ranges: none');
    header('Content-Type: audio/mpeg');

    echo $audio;
于 2021-10-09T15:54:02.437 回答