Я работал над системой электронного документооборота несколько лет назад, и мы сделали в значительной степени то, что предложили Gamecat и wic.
То есть присвойте каждому изображению уникальный идентификатор и используйте его для определения относительного пути к файлу изображения. Мы использовали MOD, подобный тому, что предлагал wic, но мы разрешили 1024 папки / файла на каждом уровне, с 3 уровнями, чтобы мы могли поддерживать файлы 1G.
Однако мы удалили расширение из файлов. Записи БД содержали тип MIME, поэтому расширение не требовалось.
Я бы не рекомендовал хранить полный URL-адрес в записи БД, только ID изображения. Если вы храните URL-адрес, вы не можете переместить или реструктурировать свое хранилище без преобразования вашей БД. Относительный URL-адрес будет в порядке, так как таким образом вы можете по крайней мере перемещать хранилище изображений, но вы получите большую гибкость, если просто сохраните идентификатор и получите URL-адрес.
Кроме того, я бы не рекомендовал разрешать прямые ссылки на ваши файлы изображений из Интернета. Вместо этого предоставьте URL-адрес для программы на стороне сервера (например, сервлет Java) с идентификатором изображения, который указывается в запросе URL-адреса (http://url.com/GetImage?imageID=1234
).
Сервлет может использовать этот идентификатор для поиска записи в БД, определения типа MIME, определения фактического местоположения, проверки ограничений безопасности, ведения журнала и т. Д.