При хранении изображений в файловой системе использовать относительные или абсолютные пути? - PullRequest
2 голосов
/ 24 марта 2009

Я работаю над веб-приложением, и я решил (после прочтения многих постов на SO) сохранить фактические изображения в файловой системе и метаданные в БД.

Должен ли я хранить относительный или абсолютный путь.

Я могу придумать некоторые преимущества для каждого из вариантов.

Абсолютные:

Плюсы:

Очевидно, что файл находится даже в других приложениях, читающих БД
Можно поместить фотографии в любое место на диске (потребуется обработчик)

Минусы:

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

Относительная:

Плюсы:

Просто добавьте ссылку на HTML, и она работает

Минусы:

Если я меняю корень приложения, мне нужно переместить картинки или изменить все пути
Приходится размещать картинки в общедоступном каталоге (или я ничего не получаю по абсолютному пути)

Хорошо, сейчас у меня в голове происходят некоторые вещи.

Я не могу решить.

Ответы [ 5 ]

6 голосов
/ 24 марта 2009

Я бы сохранил относительный путь в базе данных. Это дает вам наибольшую гибкость. Загрузка изображений - это просто добавление переменной IMAGE_ROOT (которая, вероятно, должна быть настраиваемой) для получения пути к файловой системе. Это важно, потому что вы можете захотеть переместиться туда, где хранятся изображения (например, поместить их на более быстрый диск). Тогда это просто изменение настраиваемого IMAGE_ROOT.

При размещении ссылки на изображение на странице я бы указывал полный URL. Опять же, это просто добавление URL_ROOT к относительному пути. Это дает вам возможность легко переключать серверы, если для загрузки требуется выделенные серверы для обслуживания образов.

4 голосов
/ 24 марта 2009

Если вас интересует переносимость информации в вашей базе данных, просто сохраните базовый путь в базе данных. Таким образом, когда вы перемещаете файлы, все, что вам нужно сделать, это изменить базовый путь, который вы сохранили в БД. Эта информация должна храниться отдельно от путей к файлам. Хранение такой информации в одной строке приведет к большому количеству ненужного дублирования.

3 голосов
/ 24 марта 2009

Я предпочитаю хранить их как относительные пути, чтобы приложение не зависело от его местоположения. В ASP.NET есть «~» для автоматического обозначения корня приложения, вы можете сделать то же самое, а затем просто заменить его константой при использовании, так что вам не придется беспокоиться, если вы измените корень приложения.

1 голос
/ 24 марта 2009

Если вы используете SQL Server 2008, вы можете аккуратно решить эту проблему с новым типом данных FILESTREAM .

0 голосов
/ 24 марта 2009

Я согласен. Хранение относительных путей означает меньше информации в БД, и если вы храните базовый путь где-то, вам нужно изменить его только один раз. Затем вы создаете свои полные URL-адреса, добавляя более короткую ссылку из базы данных в базовый путь.

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