как организовать изображения в потоках? - PullRequest
2 голосов
/ 15 января 2010

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

Интересно, как мне организовать папки для этого?

они должны быть отсортированы по темам или пользователям? но как они будут организованы в этих папках?

и как я могу связать фотографии некоторых постов с записью в базе данных? например, если в посте загружено 5 изображений, должен ли я иметь отношение «один ко многим» (одна тема - много картинок), где записи рис содержат название картинок?

Я никогда не делал этого раньше.

было бы здорово, если бы кто-нибудь мог дать мне какой-нибудь совет.

Ответы [ 3 ]

2 голосов
/ 15 января 2010

Ожидаете ли вы обрабатывать / копировать / передавать / удалять ценные изображения за один раз? Если это так, возможно, имеет смысл создать папку для каждого потока. Иначе не было бы особой выгоды. Фактически это может быть недостатком ... например, если вы можете перемещать сообщения из одного потока в другой или объединять потоки, вам потребуется написать дополнительный код для перемещения файлов изображений.

например, если пост получил 5 загруженных изображений, должен ли я иметь отношение один ко многим (одна ветка - много картинок)

Да, или, может быть, один пост много фотографий?

где записи pic содержат названия картинок?

Если вы помните имена файлов загруженных файлов, это должно быть только для целей отображения в теме. Не использовать предоставленное пользователем имя файла в качестве имени файла в файловой системе вашего сервера. Это рискует конфликтом, когда два пользователя загружают файлы с одинаковыми именами, и в любом случае «очистка» имен пользователей в целях безопасности затруднительна.

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

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

1 голос
/ 15 января 2010

Предложения:

  • не смешивайте имена файлов с вашей структурой потока
  • имена файлов должны быть уникальными - вероятно, идентификатор записи базы данных, связанной
  • использовать систему папок, чтобы ограничить количество потенциальных файлов в одной папке

Я использовал что-то вроде 1.jpg, 2.jpg для имен изображений. Каждая папка имеет 1000 изображений, и имя папки будет 00000001 для первых 1000 изображений (цифра в тысяче цифр дополнена цифрами от 0 до 8). Это позволит вам хранить 100.000.000.000 изображений и быстрый доступ.

Отношения между изображениями и потоками должны представлять собой таблицу MN с 2 индексами для идентификаторов потоков и идентификаторов изображений.

1 голос
/ 15 января 2010

Вы спрашиваете о внутренней сортировке образа в файловой системе, верно? Я бы организовал это так: imagefolder / user.id / image.jpg

Потому что это намного проще, чем делать что-то вроде год / месяц / день / нить ..

-

Только что видел обновление.

Что касается вашей части базы данных, я бы сказал, что вам не нужно сохранять ее в отдельной таблице. Если вы сохраняете посты цепочки подряд, вы можете сохранить там html и предоставить окно, в котором пользователь может проверить, какие изображения он хочет вставить / загрузить. это записывает соответствующий HTML-тег относительно сохраненной позиции. Так что, в основном, это просто расширение редактора, такого как stackoverflow.

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

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