2013-06-28 3 views
3

Может ли кто-нибудь направить меня на лучший способ хранения изображений для моего сайта. Im делает мой первый веб-сайт MVC, и я думал, что просто начну с сайта с изображениями с комментариями к этим изображениям.Лучший способ хранить изображения для веб-сайта

Im, отображающий мои изображения в галерее с помощью javascript, для чего требуется URL-адрес изображений. Я хочу, чтобы пользователи загружали изображения, но я не уверен, что лучший способ сохранить их на сервере. Я сохраняю их в папках на сервере как чистый образ? Или лучше использовать SQL для обработки данных, будь то байт [] или ive, слышавший о Filestream, может ли filestream дать мне то, что мне нужно? Или есть лучший способ?

Благодаря

+0

Если бы я не был на работе, я бы дал вам расширенный ответ на это, но в моей компании MVC (модифицированная версия CodeIgniter) храню изображения в поле longblob в mySQL (в основном храня данные необработанного изображения) и отображать эти изображения через скрипт php.Например, если бы я хотел получить изображение с идентификатором из 1 из базы данных, я бы пошел в/image/1, и он отобразил бы это изображение. Про хранить это в базе данных - это то, что я могу манипулировать и затем кэшировать эти данные, что хорошо для таких сайтов изображений, как ваш. Наша система расширяется для/image/1/resize/100/100 и автоматически кэшируется для скорости – SixteenStudio

ответ

7

Я бы сказал, что магазин все изображения в папке изображения, а затем сохранить путь изображений в базе данных, например, если мы делаем сообщения и каждое сообщение имеет изображение, мы могли бы Загружайте image в /webroot/images/ и сохранить путь /webroot/images/someimage.jpg в базе данных.

Если на веб-сайте будет много изображений, лучше сделать дальнейшую организацию, если тысячи файлов в одной папке не очень хорошие, особенно если вы собираетесь попробовать подключиться к ftp-файлу, то вы может добавить еще одну папку с идентификатором сообщения (в примере, который я упомянул), чтобы он стал, например, /webroot/images/[id]/image1.jpg.

Если префикс всегда совпадает /webroot/images вы можете игнорировать его в базе данных, чтобы сохранить некоторое дисковое пространство при условии, что приложение знает, где папка изображения есть, также вы можете игнорировать id во втором примере, вид код будет что-то вроде этого

<img src='<?= IMAGES_FOLDER."/".$post->getId()."/".$post->getImageName() ?>' /> 

Ofcourse было бы неплохо добавить getImage() функции в посте, что делает именно это, проверить пример:

public function getImage() 
{ 
    return IMAGES_FOLDER."/".$this->getId()."/".$this->getImageName(); 
} 

img тега будет чище

<img src='<?= $post->getImage() ?>' /> 

PS: Сохранение изображений в базе данных крайне неэффективно, так как база данных, как правило, бутылочное горлышко применения, хранение изображений было бы увеличить размер базы данных, и будет делать больше обращений при обращении к любому изображению на веб-сайте, не говоря уже о том, чтобы открыть любое изображение, необходимое для запуска скрипта php (или любого другого языка), чтобы служить этому изображению, что увеличило бы использование ОЗУ на сервере.

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

Конечно, все имена, которые я предложил, предназначены только для примеров, вы можете использовать имена, подходящие для вашего приложения.

+0

Спасибо за помощь. другой вопрос для кого-то, я тоже хочу сделать видео в какой-то момент, поэтому вам нужно иметь хост asp.net mvc4 с большим файловым хранилищем. кто-нибудь знает хороший дешевый сайт. –

+0

, спрашивая о дешевом сервисе, не из темы, но если вам нужно действительно большое хранилище, я бы предложил взглянуть на услугу amazon s3 –