Задать вопрос

Правильное хранение изображений на сервере

Подскажите пожалуйста, как осуществить механизм хранения изображений в файловой системе и ссылок на эти изображения в MySql? Желательно в деталях. И правильно ли хранить изображения на том же сервере, что и MySQL? Заранее спасибо.
  • Вопрос задан
  • 22780 просмотров
Подписаться 12 Оценить Комментировать
Решения вопроса 1
nikel303
@nikel303
Можно хранить имя файла (good.jpg) и тип картинки (goods), например картинка товара, на основе этой информации строить путь, так, как вам угодно, например:
/media/origin/goods/g/go/good.jpg
/media/origin/goods/t/to/tovar.jpg

Если нужно сохранить картинку с таким же именем, то в конец дописываем индекс, например:
/media/origin/goods/g/go/good.jpg
/media/origin/goods/g/go/good__1.jpg
/media/origin/goods/g/go/good__2.jpg

Подпапки после типа картинки /g/go/ нужны, чтобы в одну директорию не сваливалось слишком много файлов.

Если в качестве имени файла используются цифры (напрмер - это индексы записей в базе), то подпапки лучше формировать с конца имени файла, например:
125.jpg -> /5/2/125.jpg
126.jpg -> /6/2/126.jpg
это позволит более равномерно распределять файлы по папкам.

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

Закешированые картинки соответственно будут храниться, например, по такому пути /media/cached/goods/<название пресета (200x120r)>/go/g/good.jpg

Пресет можно формировать, например, на основе ширины, высоты, способа масштабирования, и названия фильтра
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
evnuh
@evnuh
Поиск Гугл помог мне, впусти и ты его в свой дом
Странный вопрос. Вы думаете, что есть какие-то хитрые способы хранения изображений?) На диск кладете картинку, в БД кладете путь к ней. Все.
Ответ написан
Комментировать
afiskon
@afiskon
У вас есть множество серверов для хранения картинок. Возможно. тех же самых, на которых работают и скрипты, не важно. Вы на этих серверах держите специальную приложеньку для заливки картинок. Когда приходит картинка, выбираете случайным образом один из серверов (держите список в MySQL/Redis/неважно), заливаете картинку, получаете обратно ссылку. В базу пишите ссылку img123.myproject.com/123/45/38475.jpg.

Если сервер дохнет, поднимаете новый, присваиваете ему имя img123.myproject.com, восстанавливаетесь из бэкапа, снова все работает. Раздавать картинки, разумеется, нужно не через приложеньку, а напрямую через nginx.

А еще для хранения картинок неплохо подходит Riak. Плюс в том, что вы получите шардинг, решардинг и репликацию из коробки и особо думать ни о чем не надо.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы