Directory 联机文件存储服务的目录设置
我正在开发一个主要使用PHP和MySQL的在线文件存储服务,用户可以上传10-20GB大小的文件 未注册用户可以上传文件,但不能上传到个人存储空间,而只能上传未注册用户上传的所有文件 注册用户将获得固定数量(将来可能会增加)的个人存储空间,并可以访问文件管理器,以便轻松管理和组织其所有文件。他们还可以将自己的文件设置为私有(除了自己之外,任何人都不能下载)或公共Directory 联机文件存储服务的目录设置,directory,directory-structure,Directory,Directory Structure,我正在开发一个主要使用PHP和MySQL的在线文件存储服务,用户可以上传10-20GB大小的文件 未注册用户可以上传文件,但不能上传到个人存储空间,而只能上传未注册用户上传的所有文件 注册用户将获得固定数量(将来可能会增加)的个人存储空间,并可以访问文件管理器,以便轻松管理和组织其所有文件。他们还可以将自己的文件设置为私有(除了自己之外,任何人都不能下载)或公共 什么可能是一个好的目录设置? 我正在考虑一个“个人”目录,其中包含以用户id作为每个注册用户文件夹名称的文件夹 除了个人目录之外,还
什么可能是一个好的目录设置? 我正在考虑一个“个人”目录,其中包含以用户id作为每个注册用户文件夹名称的文件夹 除了个人目录之外,还有一个“其他”文件夹,其中只包含未注册用户上传的所有文件 两者都将包含上载的文件,每个文件对应的行id(来自数据库中的文件表)作为文件名
ROOT
FOLDER uploads
FOLDER personal
FOLDER 1
FILE file_id1
FILE file_id2
(...)
FOLDER 2
FILE file_id3
FILE file_id4
(...)
(...)
FOLDER other
FILE file_id5
FILE file_id6
(...)
这是我第一次处理这样的情况,但到目前为止,我所能想到的都是这个概念。欢迎提出任何建议 基本上,您需要解决以下主题:
======
users
======
id (unsigned INT, primary key)
username
password
isregisteredflag
...any other not relevant for the topic...
======
files
======
id (unsigned INT,primary key)
filename
_userid (foreign key to users.id)
createddate
fileattributes
...any other not relevant for the topic...
======
tag2file
======
_fileid (foreign key to files.id)
_tagid (foreign key to tag.id)
======
tags
======
id (unsigned INT,primary key)
tagname
由于此结构允许您从用户ID派生文件,也可以从文件派生用户ID,因此不需要将该关系存储为文件夹结构的一部分。您只需将文件命名为physical layer files.id,这是数据库生成的一个数值。由于ID是由数据库生成的,所以请确保它们是唯一的。现在,您还可以使用标记,为用户提供更丰富的分类体验(如果您不喜欢标记,也可以在数据库中使用文件夹)
注意第4点对您的设计有很大的影响。如果你在设置好整个过程后小心,你可能会加倍努力。因为所有事情都是从数字ID构建文件,所以将物理文件存储在无sql数据库(而不是文件系统)中的键值存储中是一个非常小的步骤,这使得您的系统可扩展性非常好。这意味着您将为元数据和结构数据使用sql数据库,为文件内容使用nosql数据库
顺便说一句,为了覆盖您的公共文件,我假设您有一个ID为1的用户“public”。这最终导致一些数据硬编码,这意味着很难看。然而,由于功能“public”是应用程序中的一个核心元素,您可以通过以适当的方式记录它来为不成文的法律做出贡献。或者,您可以添加更多的表,并放大代码,以“干净”的方式覆盖两个不同的内容。在我看来,实际使用哪种文件夹结构并不重要。当然(如前所述),存在操作系统和FS限制,您可能需要花一两个时间考虑扩展 但最后,我会推荐一种更灵活的存储和恢复方法