2012-04-23 153 views
2

我正在实现一个允许用户上传文件的网站。我想知道如何构建上传文件夹,以便将来可以轻松管理上传的文件。我应该为不同的用户提供不同的子文件夹(例如,user1的upload/user1,user2的upload/user2等),还是应该将它们放在同一个文件夹中?我应该重命名上传的文件吗? (我知道,很多网站做到这一点!)上传文件的文件夹结构

回答

1

如果你不会使用BLOB,而用户可能有图像的任意数量的话,我想你应该使用子文件夹。例如,您可以创建一个以用户标识命名的子文件夹。其中一个原因是当文件夹包含大量文件时,访问时间会增加,因为需要更多时间才能找到具有指定名称的文件。您也可以在存储文件时重命名这些文件,以避免名称重叠。请不要忘记将新生成的名称存储在数据库中。

+0

我遇到了一个解决方案,它告诉我如何构建我的上传文件夹:主文件夹称为'upload',它由3个级别组成(例如:'upload/0/0/file.jpg')。当文件夹'upload/0/0'被1024个文件填充时,自动创建文件夹'upload/0/1'。 'upload/0'文件夹可以有1024个子文件夹('upload/0/0'到'upload/0/1023')。同样,文件夹'upload'也可以有1024个子文件夹。因此,我们最多可以存储2^30个文件。如果每天用户上传总共1024个文件,则需要2873年才能使用该空间。你认为这是可行的吗? – 2012-04-24 09:57:44

+0

我认为做这样的事情可能会更好:用用户名来命名第一级子目录。只有当您为用户上传的每张图片分配一个唯一的ID时,下一步才有效。然后你可以尝试将第二级子目录命名为strval($ imgId%DIVISOR_CHOSEN_BY_YOU)。在某些情况下,这可能会减少每个子目录中的图像数量,我想。请注意,我很远离这方面的专家,尽管... – Exander 2012-04-24 13:18:20

0

重命名,如果你想为“隐藏”给任何人没有登录,例如他们可能是有用的。只需将它们的原始名称存储在数据库中。

此外,你可以随时所有存储在BLOB类型的SQL表。可以是几个GB,并让你联系一个文件名,用户名,任何其他。

+0

一位同事曾经跟我说,我不应该使用BLOB类型,因为它会不必要地扩大分贝。无论如何,感谢您对文件重命名的回答,尽管我仍然对上传文件的位置感到困惑 – 2012-04-23 03:56:45

+0

它会放大数据库,但使用文件会扩大目录,所以您的意思是什么?它不会减慢速度。 – DanRedux 2012-04-23 04:03:34