Архитектура загрузки изображений
Архитектура загрузки изображений
Всем привет ! Столкнулся с вопросом построения архитектуры веб приложени, а именно как и где хранить загруженые картинки
рабочий вариант загрузки изображений:http://www.yiiframework.ru/doc/cookbook ... .fat.model
Но вот возникают вопросы:
1 например а каждого пользователя будет аватар, где хранить аватарку ? в папке аватарок ? или для каждого пользователя создавать папку и в ней хранить изображения для этого пользователя ?
2 у каждого пользователя может быть несколько статей, нужно загружать изображения для этих статей, вопрос тот же - общую папку делать или папку изображений пользователя ?
3 буду рад выслушать другие варианты загрузки изображений (отличающийся от ссылки выше)
как это вообще обычно реализовывают ?
рабочий вариант загрузки изображений:http://www.yiiframework.ru/doc/cookbook ... .fat.model
Но вот возникают вопросы:
1 например а каждого пользователя будет аватар, где хранить аватарку ? в папке аватарок ? или для каждого пользователя создавать папку и в ней хранить изображения для этого пользователя ?
2 у каждого пользователя может быть несколько статей, нужно загружать изображения для этих статей, вопрос тот же - общую папку делать или папку изображений пользователя ?
3 буду рад выслушать другие варианты загрузки изображений (отличающийся от ссылки выше)
как это вообще обычно реализовывают ?
-
- Сообщения: 1268
- Зарегистрирован: 2013.07.17, 17:37
Re: Архитектура загрузки изображений
храните как угодно, на граблях научитесь, главное делайте в моделях методы по типу getAvatarImage(), getPostImage которые брали бы путь с какойто переменной, а уж поменять потом будет без проблем все енто дело, а вообще все зависит от кол-ва картинок в 1 папке, и это больше к минусам\плюсам ФС
Re: Архитектура загрузки изображений
1. Одной общей папки avatars хватит. Но при желании можно разбивку на поддиректории сделать.
2. Подпапка у каждого пользователя + указание её корневой для файлменеджера WYSIWYG редактора.
2. Подпапка у каждого пользователя + указание её корневой для файлменеджера WYSIWYG редактора.
Re: Архитектура загрузки изображений
а у php есть методы создание папок ?
например при регистрации пользователя создавать папку пользователя куда можно будет кидать все изображения
например при регистрации пользователя создавать папку пользователя куда можно будет кидать все изображения
Re: Архитектура загрузки изображений
например будет ли правильно писать такой код при регистрации пользователя
Код: Выделить всё
<?php
public function makeDir(){
mkdir("/path/to/my/dir", 0700);
}
?>
-
- Сообщения: 64
- Зарегистрирован: 2012.11.19, 08:42
Re: Архитектура загрузки изображений
http://php.net/manual/ru/function.mkdir.phpsapgv писал(а):а у php есть методы создание папок ?
например при регистрации пользователя создавать папку пользователя куда можно будет кидать все изображения
-
- Сообщения: 64
- Зарегистрирован: 2012.11.19, 08:42
Re: Архитектура загрузки изображений
Может быть проблема, папка не будет создоваться из-за прав доступаsapgv писал(а):например будет ли правильно писать такой код при регистрации пользователяКод: Выделить всё
<?php public function makeDir(){ mkdir("/path/to/my/dir", 0700); } ?>
- TranceSmile
- Сообщения: 562
- Зарегистрирован: 2011.06.27, 19:04
- Откуда: Украина
- Контактная информация:
Re: Архитектура загрузки изображений
желательно повторить основы php mkdir(). в моделей пользователей в событие afterSave() и создать папку для пользователя. Только один вопрос как вы будете бороться с одинаковыми файлами с разными именами?
Re: Архитектура загрузки изображений
ок решил создавать для каждого пользователя свою папку
например user c id = 502 создам папку (502)
а в ней подпапки
-502
- avatar //буду тут хранить аватар пользователя
- profile //буду тут хранить остальные фотки пользователя
- posts //тут будут например статьи пользователя (внутри разобьем подпапки)
- 1 //папка для изображений 1 статью
- 2 //папка для изображений 2 статьи
- 3 //папка для изображений 3 статьи
вопрос может лучше объединить папки avatar и profile ?
также стоит ли разбивать папку posts ? или хранить изображений всех статей в папке posts ?
например user c id = 502 создам папку (502)
а в ней подпапки
-502
- avatar //буду тут хранить аватар пользователя
- profile //буду тут хранить остальные фотки пользователя
- posts //тут будут например статьи пользователя (внутри разобьем подпапки)
- 1 //папка для изображений 1 статью
- 2 //папка для изображений 2 статьи
- 3 //папка для изображений 3 статьи
вопрос может лучше объединить папки avatar и profile ?
также стоит ли разбивать папку posts ? или хранить изображений всех статей в папке posts ?
Re: Архитектура загрузки изображений
даа, вопрос имен файлов тоже открыт
Re: Архитектура загрузки изображений
Я не прибегал к подробной иеархии, делал как для фото галереи, создаем папку с случайно сгенерированным названием, потом в нее помещаем картинки допустим до 1000, затем создаем еще папку и ее наполняем картинками, как то так.
-
- Сообщения: 1268
- Зарегистрирован: 2013.07.17, 17:37
Re: Архитектура загрузки изображений
и в поле image хранить еще имя папки? лишняя инфа, а при перемещении в другую папку так вообще %)icewill писал(а):Я не прибегал к подробной иеархии, делал как для фото галереи, создаем папку с случайно сгенерированным названием, потом в нее помещаем картинки допустим до 1000, затем создаем еще папку и ее наполняем картинками, как то так.
Re: Архитектура загрузки изображений
ну мне хотелось бы всегда знать где что лежит
а так получится что часть фоток в первой папке (с 1000 элементами) а оставшаяся часть в другой папке
надо будет делать таблицы связей куда записывать где что лежит
а так получится что часть фоток в первой папке (с 1000 элементами) а оставшаяся часть в другой папке
надо будет делать таблицы связей куда записывать где что лежит
Re: Архитектура загрузки изображений
Пять символов погоды не сделают, а зачем что то перемещать?lancedevnull писал(а):и в поле image хранить еще имя папки? лишняя инфа, а при перемещении в другую папку так вообще %)icewill писал(а):Я не прибегал к подробной иеархии, делал как для фото галереи, создаем папку с случайно сгенерированным названием, потом в нее помещаем картинки допустим до 1000, затем создаем еще папку и ее наполняем картинками, как то так.
Re: Архитектура загрузки изображений
Если запись одна то ок, а если фоточек миллион? бессмысленно раздутая БД
Перемещать чтобы, например разделить нагрузку по нескольким сервакам
И еще, когда у вас несколько пользователей грузят фотки, каждый раз пересчитываются файлы в папке, зачем? И дисковые операции довольно медленные
Перемещать чтобы, например разделить нагрузку по нескольким сервакам
И еще, когда у вас несколько пользователей грузят фотки, каждый раз пересчитываются файлы в папке, зачем? И дисковые операции довольно медленные
Последний раз редактировалось _axl 2013.07.25, 10:26, всего редактировалось 1 раз.
- TranceSmile
- Сообщения: 562
- Зарегистрирован: 2011.06.27, 19:04
- Откуда: Украина
- Контактная информация:
Re: Архитектура загрузки изображений
сделать таблицу с полями
тип рисунка - аватар, и т.д.
ид юзера
путь
хеш файла
И при загрузке файла проверать хеш файла.
тип рисунка - аватар, и т.д.
ид юзера
путь
хеш файла
И при загрузке файла проверать хеш файла.
Re: Архитектура загрузки изображений
я понимаю что единственного правильного решения быть не может
нужно выбрать оптимальное решение, потому что подразумевается что изображений пользователя будет немного,
но будет много его статей и в каждой статье будет до 6 изображений
нужно выбрать оптимальное решение, потому что подразумевается что изображений пользователя будет немного,
но будет много его статей и в каждой статье будет до 6 изображений
Re: Архитектура загрузки изображений
Английский алфавит состоит из 26 символов, ну и длина 5. 26 возводим в 5 степень получается 11 881 376 возможных вариаций названий папок, куда больше?:)Если длина 5 символов, то много папок вы не создадите.
Но если уж у вас очень глобальный проект можно еще в длину один символ добавить.
Re: Архитектура загрузки изображений
во-первых, прежде чем начинать что-то делать по данному вопросу, читаем это!
в данной статье расписан наиболее универсальный способ хранения изображений.
Чем плохи методы, описанные здесь ранее:
А еще больше половины из этих пользователей зарегистрируются один раз и уйдут навсегда, зачем тебе пустые папки?
Лишний код в контроллерах, моделях, везде. Гораздо удобнее сделать один единственный загрузчик изображений и хранить информацию об изображениях в одной таблице, а в других таблицах сделать поля типа avatar_id, image_id, profile_photo_id и т.д.
в данной статье расписан наиболее универсальный способ хранения изображений.
Чем плохи методы, описанные здесь ранее:
А что если будет 30 тыс пользователей, а если 500 тыс? К слову, в одной директории может быть максимум 65535 файлов, так что не вариант.Для каждого пользователя своя папка
А еще больше половины из этих пользователей зарегистрируются один раз и уйдут навсегда, зачем тебе пустые папки?
Лишний код в контроллерах, моделях, везде. Гораздо удобнее сделать один единственный загрузчик изображений и хранить информацию об изображениях в одной таблице, а в других таблицах сделать поля типа avatar_id, image_id, profile_photo_id и т.д.
Лишняя таблица, которая вообще не нужнасделать таблицу с полями
тип рисунка - аватар, и т.д.
Re: Архитектура загрузки изображений
мой способ - папка files/avatar + модель. Потом для каждой новой фотки создаю случайное имя папки (2 символа) и проверяю есть ли такая папка. Если есть - в существующую записываю, если нет - новую создаю. Для файла так же случайное имя генерирую. Ну и в таблицу, соответственно, указываю путь (начиная к примеру после папки 'files'). Потом когда нужно выдать thumb - захожу в папку где лежит полная фотография, проверяю есть ли там папка tmp (для превьюшек) и есть ли в этой папке что то типа 130x130_resizeType_filename.jpg и выдаю её, если нет - то создаю и выдаю.
Таким способом решаю сразу несколько проблем: ограничиваю кол-во файлов в каждой папке; переименовываю всегда, что б не возникало проблем; и вообще лучше пересобирать даже первичную фотографию
Со статьями - подобная ситуация. files/post. Так же хранить, и отдельную таблицу, где id поста и пусть к изображению, для одной id много изображений.
И еще, удаление - в afterDelete добавляю функционал, который удаляет все фотографии с компьютера. Получаю basename фотографии, потом лезу в tmp и от туда убираю все, что имеет в названии "_basename".
Таким способом решаю сразу несколько проблем: ограничиваю кол-во файлов в каждой папке; переименовываю всегда, что б не возникало проблем; и вообще лучше пересобирать даже первичную фотографию
Со статьями - подобная ситуация. files/post. Так же хранить, и отдельную таблицу, где id поста и пусть к изображению, для одной id много изображений.
И еще, удаление - в afterDelete добавляю функционал, который удаляет все фотографии с компьютера. Получаю basename фотографии, потом лезу в tmp и от туда убираю все, что имеет в названии "_basename".