如何在不提供绝对路径的情况下传输音频文件

时间:2015-11-11 13:45:08

标签: javascript php html5 audio

无论如何流式传输音频文件而不提供文件的complete path

例如,每当我们尝试使用HTML5音频标签或使用javascript播放mp3文件时,我必须提供类似于此的mp3文件的完整路径

<audio controls>
  <source src="http://example.com/file/hello_name.mp3" type="audio/mpeg">
</audio>

所以,我认为我们可以提供一个id的mp3文件,而不是文件的complete path,应该是这样的:

<audio controls>
  <source src="http://example.com/stream.php?file_id=111" type="audio/mpeg">
</audio>

2 个答案:

答案 0 :(得分:0)

通常,您会stream.php通过发送带有header()的正确标头和提供readfile()的数据来提供二进制数据(例如,对于file_id == 111,如您的示例所示)您在file_id与数据库中的物理文件或类似物之间存在关系。

请谨慎使用readfile(),并注意它只会输出它告诉的内容,因此请确保您的应用程序不允许有人告诉它输出其他内容,例如配置文件和数据库密码等。

答案 1 :(得分:0)

您的stream.php文件将如下所示:

<?php
    // Say you hava a table "file_paths" with two columns file_id and file_path
    $sql = $pdo->prepare("SELECT FROM file_paths WHERE file_id = ?");
    $sql->bindValue(1, $_GET['file_id'], PDO::PARAM_INT);
    $sql->execute();
    $fetch = $sql->fetchObject();

    // retrieve file path using its id
    $path = $fetch->file_path;
    header("Location: " . $path);
?>

然后在目标页面上,通过将file_id传递给stream.php来添加播放器,如下所示:

<audio controls>
  <source src="stream.php?file_id=123" type="audio/mpeg">
</audio>