什么时候文件才是文件?
因此,我们正在编写一个Web应用程序,并且我们可以在网站的多个区域中供用户上传文件。我的基本工作方法是将实际文件存储在服务器上,并具有一个数据库表,该表将存储的文件名连接到与其相关的记录。
我的问题是:每个"类型"的文件都应该有一个不同的表吗?另外,文件应该存储在服务器上与上下文相关的位置,还是一起存储?
例如:用户个人资料照片,求职简历,CMS页面上的相关文档等。
解决方案
回答
从我们所说的来看,我只是将具有随机(UUID或者不包括)文件名的文件存储在一个地方。然后,我将拥有一个"附件"表或者包含对所有外部文件的引用的表。该表还将包含该文件的元数据,因此它是什么类型的文件(图片,CV等),依此类推。
但是,根据所使用的FS,一个目录中的文件数可能会有严格的限制。
回答
将不同的文件存储在不同的位置可能有多种原因。
首先,可能要考虑限制一个目录中文件的数量。
其次,如果某些要公开显示(例如个人资料照片),而其他一些则不公开(例如CV),则安全性可能是一个问题,然后将它们放在不同的目录中将更易于管理。
第三,如果拆分文件,例如在文件浏览器中浏览或者管理备份或者修改应用程序以在多个位置拆分文件存储,则简单的管理任务可能会更容易。
还有文件名冲突的问题,但是如果我们重命名所有内容以匹配数据库ID字段(例如),那么这将不是问题。
但是最终,它可能取决于数量和我们自己的偏好。
回答
仅当我们为每种类型的文件存储其他元数据(因此,还有其他列)时,每种文件类型的不同表才有意义。如果每种文件类型的表只包含相同的列(例如,文件名,文件类型,日期上传等),则将它们全部放在一个表上是有意义的。
回答
在示例中,有两个表的参数,因为我们有可以与两个不同的事物关联的文件。
- 个人简历,照片与用户相关联。
- 附件与CMS页面相关联。
如果将它们放在一张表中(并且要允许用户拥有多张照片或者简历),则需要两个链接表来关联文件->用户和文件-> cms_pages。可以说这暗示着HABTM关系,这种关系是不正确的,并且允许不一致的数据。
两表方法稍微干净一点,仅允许文件通过简单的belongsTo关系与正确类型的实体相关联。
但是,除非我们需要为不同的文件类型存储不同类型的元数据,否则我认为该问题没有任何"正确"答案。
另外,请确保存储或者能够计算每个文件的模仿类型,以便可以使用正确的HTTP标头将其正确地发送回浏览器。