Как создать решение, ограничивающее пользовательское хранилище в приложении? - PullRequest
2 голосов
/ 09 октября 2009

Я не могу найти хорошее решение для ограничения объема хранилища, к которому пользователь может обращаться со своими файлами.

В приложении пользователям разрешено загружать ограниченное количество файлов. Ограничение основано на общем размере файла. То есть пользователю может быть разрешено хранить 50 МБ на сервере.

Этот номер хранится в базе данных, поэтому его можно легко увеличивать / уменьшать.

Используемый язык - PHP, но я думаю, что решение не зависит от языка сценариев.

Очень жаль, если вопрос неясен. Я действительно не знаю, о чем просить больше, чем о стратегии для реализации.

Спасибо!

Ответы [ 5 ]

5 голосов
/ 09 октября 2009

Отслеживание того, сколько места было использовано, должно быть простым - при каждой загрузке вы можете хранить пространство, используемое в другой таблице. Функция PHP filesize() сообщит вам размер файла на диске. Используйте SQL-запрос SUM(), чтобы получить общий размер всех файлов, загруженных каждым пользователем, и сравнить его с пределом квоты.

Сложность в том, когда вы приближаетесь к пределу - вы не можете сказать, насколько большим будет файл, прежде чем он будет загружен. Таким образом, вам нужно будет заставить пользователя загрузить файл, а затем проверить его размер и посмотреть, принимает ли он его за квоту. Если файл слишком большой, удалите его и сообщите пользователю, что у него недостаточно места.

2 голосов
/ 09 октября 2009

Простой подход заключается в сохранении имени файла, дат и размеров загружаемых пользователями данных в базе данных. Затем вы можете легко отклонить загрузку, когда она превысит их общий объем.

Это также упрощает отображение списка файлов, отсортированных различными способами, позволяя пользователю, близкому к своему пределу, выбрать некоторые файлы для удаления.

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

1 голос
/ 09 октября 2009

Вы можете использовать скрипт (что-то вроде , который ), который просматривает содержимое каталога, вычисляет размеры файлов, а затем удаляет файлы, которые не подходят, или отклоняет новые загрузки. Но я думаю, что это лучше сделать с какими-то ограничениями каталогов на сервере. К сожалению, я не Linux-парень, поэтому я не знаю точно, как это сделать, но этот пост может быть полезен.

0 голосов
/ 09 октября 2009

Не забывайте о решениях для ОС. Если файлы хранятся в определенном «пользовательском» каталоге, вы можете использовать ОС для поиска дискового пространства, используемого в этом каталоге. Решение Linux будет примерно таким:

$dirSize = explode("\t", `du -ks $userDir`);  // Will return an array of size, dirName
if ($dirSize[0] > MAX_DIR_LIMIT) print "USER IS OVER QUOTA";
0 голосов
/ 09 октября 2009

Решение Drewm это хорошо, я просто хочу добавить несколько слов о хитрой части, которую он упомянул.

Да, невозможно предсказать размер файла до его загрузки, так как вы не можете проверить размер файла, используя javascript на странице загрузки файла пользователя. Однако вы можете сделать это, используя загрузчик файлов на основе флэш-памяти (например, swfupload.org). Используя его, вы можете проверить размер файлов перед началом загрузки и сравнить его с установленным лимитом загрузки. Таким образом, вы сэкономите время для пользователя (нет необходимости загружать файл, чтобы получить сообщение «ошибка превышения лимита»).

В качестве бонуса вы также можете показать индикатор загрузки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...