5

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

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

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

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

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

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

4

5 回答 5

12

请参阅早期的 StackOverflow 问题将图像存储在数据库中,是还是不是?.

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

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

于 2008-10-09T10:28:09.680 回答
4

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

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

于 2008-10-09T10:35:54.233 回答
4

我会选择数据库选项。我在许多项目中使用过它,一些非常大的 100+GB。存储实现是关键,如果设计不好,你的表现就会受到惩罚。请参阅示例了解一些好的实现思路:
数据库存储允许更高的可扩展性和安全性。

于 2008-10-09T12:45:29.887 回答
3

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

这种方式访问​​这些文件(可以是大的二进制文件)不需要任何 php/database 操作,它是由网络服务器直接完成的。
此外,如果您愿意,将这些文件移动到另一台服务器会更容易。

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

于 2008-10-09T10:31:53.587 回答
1

使用 Oracle作为 Windows Forms 应用程序的后端问了一个类似的问题。

答案实际上归结为您对备份和恢复文件的要求。如果该要求很重要,那么使用数据库会更容易(因为无论如何您都在备份数据库,对吗?:o)

于 2008-10-09T10:32:01.747 回答