存储上传文件的位置(声音,图片和视频)

时间:2008-10-09 10:21:19

标签: php mysql storage blob

一段时间我不得不开发一个音乐网站,允许将音频文件上传到网站,然后使用ffmpeg转换为各种格式,人们会在购买后下载上传的音频文件,tmp文件将创建并放置在下载位置,并且仅对每个下载实例有效,然后tmp文件将被删除。

现在我正在重新审视这个项目,我还要添加图片和视频作为上传内容。

我想找到存储文件的最佳方法,

选项1:将文件存储在文件夹中并在数据库中引用它们

选项2:将实际文件作为blob存储在数据库(mysql)中。

我正在考虑这个想法,考虑每种方法的安全含义,以及我可能没有计算过的其他问题。

5 个答案:

答案 0 :(得分:12)

请参阅前面的StackOverflow问题Storing images in a database, Yea or nay?

我知道你提到了图片和视频,但这个问题与所有大型二进制内容媒体文件有关。

共识似乎是将文件路径存储到文件系统上的图像,而不是实际的图像是可行的。

答案 1 :(得分:4)

我建议将其存储为文件并将其位置存储在数据库中。

将文件存储在数据库中需要更多资源,并使备份/恢复数据库的速度变慢。 每次进行数据库转储时,您真的想要传输大量视频吗? 文件系统非常适合放弃文件,您可以非常轻松地备份/同步它们。

答案 2 :(得分:4)

我会选择数据库选项。我在很多项目中都使用过它,有些项目非常大100 + GB。存储实现是关键,设计很差,你的性能将受到惩罚。有关一些好的实施建议,请参阅this示例:
数据库存储允许更多的可扩展性和安全性。

答案 3 :(得分:3)

我会将文件直接存储在磁盘上,而数据库只保留其ID / url。

这样访问这些文件(可能是大型的二进制文件)不需要任何php /数据库操作,而是由网络服务器直接完成。
如果您愿意,也可以更轻松地将这些文件移动到另一台服务器。

实际上只有一个好处我可以看到将它们存储在数据库中更容易备份 - 无论如何你要备份你的数据库,这样你就可以在一个地方拥有所有数据,你可以确保每个备份都已满(即您没有磁盘上没有数据库条目使用的文件;并且您的数据库中没有指向无处的图像ID)

答案 4 :(得分:1)

我问了similar question using Oracle作为Windows窗体应用程序的后端。

答案实际上归结为您备份和恢复文件的要求。如果这个要求很重要,那就使用数据库,因为它会更容易(因为你正在备份数据库,对吧?:o)