Подтвердить что ты не робот

Каков наилучший способ загрузки и хранения изображений на сайте?

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

Я думал, может быть, они просто сохранили бы файл (изображение) на каком-то пути и просто сохранили бы этот путь в базе данных, так ли?

Но я хочу сделать это так. Это правильно? Например, веб-сайт с именем www.photos.com. Когда пользователь загружает изображение, я бы создал папку с именем пользователя и сохранил эти фотографии в этой папке.

Я считаю, что мы можем создать каталог с помощью php file concepts. Поэтому, когда новый пользователь загружает свою фотографию или файл, я хочу создать каталог с его именем.

Пример: если имя пользователя john, я бы создал такую ​​директорию на photos.com www.photos.com/john/, а затем сохранил все свои фотографии в этом каталоге, когда он загрузит изображение. Это правильный способ сделать это?

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

4b9b3361

Ответ 1

Все крупные веб-сайты не сохраняют изображения в базе данных, они сохраняют их на диске. Они сохраняют ссылку на позицию изображения в таблице. И затем ссылку оттуда.

Почему? Производительность.

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

Как они сохраняют фотографии действительно личными, о которых вы могли бы спросить? Они этого не делают.

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

Это изображение личное. Обратите внимание на имя файла
10400121_87110566301_7482172_n.jpg
(facebook меняет URL-адрес время от времени, так что ссылка может быть нарушена)

Он не является последовательным. Единственный способ получить изображение - узнать его адрес.
На основе предыдущей фотографии пользователя вы не можете угадать следующий. У этого есть огромная энтропия, так что, даже если вы начнете принимать произвольные дикие догадки, у вас будет множество неудач, и, если вы дойдете до картины, вы не сможете оттуда осознать личность владельцев, само по себе является защитой в анонимности.

Изменить (почему вы не должны хранить изображения в папке "имя пользователя":
После вашего редактирования стало ясно, что вы намерены размещать файлы на диске, а не в базе данных. Это изменение охватывает новый сценарий.

Несмотря на то, что ваша логика (создание папки для каждого пользователя) более упорядочена, она создает проблемы при запуске множества пользователей и многих изображений. Представьте, что на ваших серверах есть 1T дисковое пространство. И позволяет также предположить, что 1T более или менее точна с нагрузкой, которую может обрабатывать сервер.

Теперь у вас есть 11 пользователей, предположим, что они начинают загрузку в одно и то же время, и каждый загрузит более 100 ГБ файлов. Когда они достигают 91 ГБ каждый сервер заполнен, и вы должны начать хранить изображения на другом сервере. Если эта структура пользователя/папки соблюдается, вам придется выбрать одного из пользователей и перенести все свои данные на другой сервер. Кроме того, это делает жесткий лимит для пользователя, который не может загружать более 1 т в файлы.

Должен ли я хранить все файлы в одной папке, а??
Нет, большие сайты обычно хранят файлы в последовательных папках (/000001/,/000002/и т.д.), Имеющих x определенное количество файлов в папке. Это в основном связано с проблемами производительности файловой системы.

Подробнее о сколько файлов в каталоге слишком много?

Ответ 2

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

Самая большая социальная сеть в России Vkontakte делает именно это: храните изображения в файловой системе.

Другая крупная социальная сеть реализовала сложное масштабируемое хранилище памяти. Но это не доступно для общественности, AFAIK.

Резюме этого ответа: не храните blob в базе данных.

Ответ 3

- это правильный способ сделать

Да.
Единственное, что я предложил бы использовать не имя, а id.
www.photos.com/albums/1234/ будет нормально для стартера.

Ответ 4

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

Загрузка изображений в поле BLOB MySQL ™ - такая плохая идея, что такие данные изображения обычно проблематичны, если изображения намного больше, чем эскизы. Если изображения большие, вам может понадобиться скопировать/вставить один оператор SQL INSERT за раз (в phpMyAdmin). Если изображения большие, и оператор SQL INSERT разбит на две строки вашим текстовым редактором, вы никогда не сможете восстановить изображение.