Вы должны хранить только путь к изображению, а не все изображение в базе данных.
Это действительно рекомендуется. Хранение двоичных данных в базе данных семантически не имеет никакого смысла. Вы не можете ни индексировать его, ни искать в нем, и так далее. Это просто "мертвые" данные. Вы можете сохранить его в файловой системе диска, а затем сохранить его уникальный идентификатор (обычно только имя файла) в базе данных. Имя файла может быть 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>
, либо по прямому запросу или как-либо еще), прочитайте этот ответ: Служба надежных данных .