查询我的数据库中的音频文件到PHP

时间:2016-02-14 12:47:47

标签: php html mysql audio

我将mp3文件上传到我的数据库。我创建了一个包含id列和file列的表格。我使用phpMyAdmin将mp3列中的file文件上传为LONGBLOB

CREATE TABLE voices
(
id int(5),
file longblob
);

如何在HTML音频标签中检索它? 我知道我应该添加更多列来为我上传的文件提供更多信息,但这只是一个测试。

2 个答案:

答案 0 :(得分:0)

您可以提供base64编码的多媒体数据作为内联内容:

<audio controls src="data:audio/mp3;base64,T2dnUwACAAAAAAAAAAA+..........+fm5nB6slBlZ3Fcha363d5ut7u3ni1rLoPf728l3KcK" />

使用小帮手功能,它可以轻松集成到您的html输出中:

function getEmbeddedAudioSrc($type, $data) { 
   return 'data:audio/' . $type . ';base64,' . base64_encode($data); 
}

echo '<audio controls src="' . getEmbeddedAudioSrc('mp3', $row['file']) . '">';

此方法的使用通常应限于相当小的音频文件。在任何其他情况下,最好将音频文件写入光盘,只需使用普通网址作为参考。

答案 1 :(得分:0)

将MP3或图像上传到数据库通常被认为是一个坏主意,除非这些数据库专门用于提供此类内容,或者您​​有非常具体(和良好)的理由。

话虽如此,您确实可以通过序列化MP3将MP3等内容上传到数据库的BLOB字段中,但是您正在拉伸MySQL并导致不必要的延迟以移动内容和退出数据库以提供内容。

您可以做的是将数据库用作实际内容所在的指针。现在,这个架构实际上取决于你将要经营的规模。我会根据这个尺度给你一些想法:

<强> 1。 (非常)低流量

如果您不期望流量过多且应用程序在单个Web服务器中运行,则可以将内容上载到Web服务器具有读取权限的文件夹中,并从中提供内容。这甚至可以在您的应用程序目录中:

app_folder /媒体/ MP3 / your.mp3

然后您可以从HTML5中提供服务:

<source src="http://your_app_domain/media/mp3/your.mp3" type='audio/mp3' />

在这种情况下,您只需要将MP3文件上传到 media / mp3 / 文件夹,并在数据库中存储MP3的文件名您的.mp3 或整个路径 media / mp3 / your.mp3 取决于你的应用程序是否需要一些逻辑来构建文件的整个路径,或者它们是否都在同一个地方。 / p>

<强> 2。适度的流量

如果您的流量适中,问题几乎相同,但需要注意的是,您可能无法从单个Web服务器运行您的应用程序。这在实践中意味着,如果您允许上传并随后提供MP3内容,您需要尽快将其提供给所有网络服务器,如果不是即时的话。

执行此操作的快捷方法是将文件存储到某种SAN中,这样您就可以将文件存储在网络共享磁盘中,从而使其可供所有Web服务器使用立刻。但是这个解决方案感觉有点儿&#34; DIY&#34;如今,趋势是看到越来越多的架构使用云进行静态内容存储。

这让我想到了下一个选项,即将你的MP3存储在Amazon S3或类似的地方。为此,您需要使用AmazonSDK将内容上传到S3 Bucket。它与文件系统几乎完全相同,因此在您的数据库中,您仍然需要存储文件名或存储它的整个路径。然后,要在音频控件中使用它,您需要构建将S3 Bucket URL与数据库存储路径连接起来的URL:

<source src="https://mybucket.s3-eu-west-1.amazonaws.com/path/to.mp3" type='audio/mp3' />

第3。交通拥挤

最后,如果您的流量很大,最好的建议是将您的资产置于CDN之后。该解决方案几乎与中等流量的解决方案相同,但缓存MP3将节省大量数据库查询以检索MP3所在的位置,并且还允许您的网站更快地提供内容,因为CDN可以提供内容来自靠近用户所在地的数据中心。