Как хранить только путь к изображению (URL) в базе данных, а не само изображение? - PullRequest
1 голос
/ 09 декабря 2011

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

Сейчас я работаю над веб-проектом на Java, основанном на MVC, и хочу узнать больше об этой теме. В частности, я хочу знать, смогу ли я сохранить свое изображение напрямую на любом хостинге изображений с моего Servlet, который мгновенно предоставит мне ссылку, которую я буду хранить в столбце базы данных для будущего использования?

Ответы [ 3 ]

3 голосов
/ 09 декабря 2011

Вы должны хранить только путь к изображению, а не все изображение в базе данных.

Это действительно рекомендуется. Хранение двоичных данных в базе данных семантически не имеет никакого смысла. Вы не можете ни индексировать его, ни искать в нем, и так далее. Это просто "мертвые" данные. Вы можете сохранить его в файловой системе диска, а затем сохранить его уникальный идентификатор (обычно только имя файла) в базе данных. Имя файла может быть varchar, который индексируется (что позволяет быстрее SELECT ... WHERE).


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

Я не уверен, в чем ваша конкретная проблема здесь. Вы должны понимать, что передача байтов - это всего лишь вопрос чтения произвольного InputStream и записи его в произвольный OutputStream. Ваш конкретный вопрос должен быть: «Как получить InputStream загруженного изображения?» Или «Как получить OutputStream в файловую систему локального диска?», Или, возможно, «Как получить OutputStream на сайт хостинга изображений? "

Получить загруженное изображение InputStream очень просто. Все приличные API для загрузки файлов предлагают метод getInputStream(). См. Также Как загрузить файлы на сервер с помощью JSP / Servlet? Также легко получить OutputStream для File в файловой системе локального диска. Просто создайте вокруг него FileOutputStream.

File file = File.createTempFile(prefix, suffix, "/path/to/uploads");
InputStream input = uploadedFile.getInputStream();
OutputStream output = new FileOutputStream(file);
// Now write input to output.

String uniqueFileName = file.getName();
// Now store filename in DB.

Получение OutputStream для другого хоста - отдельная история. Как вы хотите подключиться к нему? Используете FTP? Используйте FTPClient#appendFileStream(). Или используя HTTP (eek)? Используйте URLConnection#getOutputStream() или HttpClient . Вы должны задать более тонкий вопрос об этом, если вы застряли.

Наконец, чтобы получить это изображение по URL-адресу (либо по <img src>, либо по прямому запросу или как-либо еще), прочитайте этот ответ: Служба надежных данных .

1 голос
/ 09 декабря 2011

Вот учебник , как загрузить файл на сервер с помощью сервлетов / JSP . Затем используйте Apache Commons IO , чтобы сохранить его в каком-либо каталоге на сервере. Сохраните путь к файлу в базе данных и используйте его при следующем запросе этого файла.

0 голосов
/ 09 декабря 2011

Конечно, вы можете использовать apache commons api , чтобы загрузить свое изображение в указанную папку на сервере, и вы можете изменить его имя по своему желанию, независимо от формата изображения, вы можете сохранить путь в базе данных и загрузить изображение с помощью сервлета. apache commons api бесплатно, вы получите соответствующую документацию apache site.

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