2012-04-23 2 views
2

Я реализую сайт, который позволяет пользователям загружать свои файлы. Интересно, как папка для загрузки должна быть структурирована, чтобы я мог легко управлять загруженными файлами в будущем. Должен ли я предоставлять разные пользователи с разными подпапками (например, upload/user1 для user1, upload/user2 для user2 и т. Д.), Или я должен просто поместить их все в одну и ту же папку? И нужно ли переименовывать загруженные файлы? (Я знаю, что многие сайты делают это!)Структура папки для загруженных файлов

ответ

1

Если вы не используете BLOB, и у пользователей может быть произвольное количество изображений, то я думаю, что вы должны использовать подпапки. Например, вы можете создать подпапку с именем после идентификатора пользователя. Одной из причин этого является то, что когда в папке содержится много файлов, время доступа увеличивается, так как требуется больше времени для поиска файла с указанным именем. Вы также можете переименовать файлы, когда они хранятся, чтобы не было шансов, что их имена будут перекрываться. Просто не забудьте сохранить вновь созданные имена в БД.

+0

Я столкнулся с решением, в котором говорится, что я собираю папку для загрузки следующим образом: Основная папка называется 'upload', которая состоит из 3 уровней (например:' upload/0/0/file.jpg'). Когда папка 'upload/0/0' заполнена 1024 файлами, папка' upload/0/1' создается автоматически. Папка 'upload/0' может иметь 1024 подпапки (' upload/0/0' to 'upload/0/1023'). Аналогично, папка 'upload' может также иметь 1024 подпапки. Поэтому максимум, мы можем хранить 2^30 файлов. Если каждый день пользователи загружают в общей сложности 1024 файла, им потребуется 2873 года, чтобы использовать пространство. Как вы думаете, это возможно? –

+0

Я думаю, что было бы лучше сделать что-то вроде этого: имя поддиректория первого уровня по идентификатору пользователя. Следующий шаг действителен только в том случае, если вы назначаете уникальный идентификатор для каждого изображения, загруженного пользователем. Затем вы можете попробовать назвать подкаталог второго уровня как strval ($ imgId% DIVISOR_CHOSEN_BY_YOU). В некоторых случаях это может сократить количество изображений в каждом подкаталоге, я думаю. Обратите внимание, что я далек от эксперта в этом, хотя ... – Exander

0

Переименование их может быть полезно, если вы когда-либо захотите «спрятать» их всех, кто не вошел в систему, например. Просто сохраните свое исходное имя в БД.

Кроме того, вы всегда можете сохранить все это в таблице SQL в виде BLOB. Может быть несколько GB и позволяет вам связывать имя файла, имя пользователя и все остальное.

+0

Сотрудник однажды сказал мне, что я не должен использовать тип BLOB, потому что он может без необходимости увеличивать db. В любом случае, спасибо за ваш ответ о цели переименования файлов, хотя я все еще смущен о местоположении для загруженных файлов. –

+0

. Он будет расширять базу данных, но использование файлов увеличит каталог, так что вы думаете? Это не замедлит его вообще. – DanRedux

Смежные вопросы