File 在网站中存储用户上传文件的最佳方式是什么?

File 在网站中存储用户上传文件的最佳方式是什么?,file,web,storage,File,Web,Storage,我试图创建一个网站,我需要在其中存储一些用户上传的文件(如一些个人资料图像,一些xml文件等) 那么,存储这些文件的最佳方式是什么 目前,我正在为每个注册的新用户在服务器上创建一个新目录,并将每个用户的文件存储在各自的目录中,但有人告诉我这不是最好的方法 那么,如何存储这些文件呢?无论我是创建一个公共目录&根据用户id或与用户相关的内容命名文件,还是继续为每个用户创建一个新目录???您有几个选项 您可以将它们作为文件存储在web根目录之外的文件系统中 您可以将它们作为二进制数据存储在标准的RMD

我试图创建一个网站,我需要在其中存储一些用户上传的文件(如一些个人资料图像,一些xml文件等)

那么,存储这些文件的最佳方式是什么

目前,我正在为每个注册的新用户在服务器上创建一个新目录,并将每个用户的文件存储在各自的目录中,但有人告诉我这不是最好的方法


那么,如何存储这些文件呢?无论我是创建一个公共目录&根据用户id或与用户相关的内容命名文件,还是继续为每个用户创建一个新目录???

您有几个选项

  • 您可以将它们作为文件存储在web根目录之外的文件系统中
  • 您可以将它们作为二进制数据存储在标准的RMDBS(如MySQL)中
  • 您可以使用专门存储文档的“NoSQL”数据库,如CouchDB或Redis

  • 最佳方式取决于您的应用程序、时间范围和经验。选项1可能是最简单的。选择2可能是最灵活的。如果选项3满足您文档的需要,它可能是性能最好的。

    可行的解决方案将取决于您的需求,例如您预期的用户数量。每个用户一个目录的解决方案可能很快就会遇到一些文件系统限制(对于ext3,一个目录中的最大子目录数固定为32000)

    每个用户一个文件在很长一段时间内应该是正常的(请参阅:)


    最后,如果您的用户基数增加,您可以使用固定数量的碎片(例如,基于用户ID)来限制目录数量和每个目录的文件数量(例如,请参见)。

    他们是否解释了他们的担忧?我担心的是,如果其他人能够访问上传的信息,他们知道该位置。如果目录是/protected/user/,信息只能通过PHP访问,这将解决我唯一的担忧。这确实是一个大问题,但现在,用户在我的应用程序中上传的文件可以是公开的,所以我现在不必担心这些。我不确定Redis是否专门存储文档——Redis主要是一个键:值存储。在NoSQL数据库讨论中使用术语“文档”时,人们通常指的是数据对象,而不是XML文件。再说一遍,我从来没有听说过在数据库中存储文件的二进制数据,所以我认为这是可能的。我承认我从来没有用过。我已将文件存储在数据库中。在PHP中,使用BLOB字段并使用pack()转换字符串二进制。我还使用了一种与GIT非常相似的方法,我使用了userid,将其填充到0000003450,然后创建了目录:/00/00/00/34/50/“GIT如何以松散格式存储其对象”链接已断开。