Как сохранить, извлечь и нарисовать изображение в веб-приложении, используя Java и PostgreSQL? - PullRequest
2 голосов
/ 16 мая 2010

дан объект X; Я хочу, чтобы этот объект имел изображение. Изображение должно быть сохранено в базе данных. Я не могу сохранить путь, фактическое изображение должно быть в базе данных.

На мой вопрос можно ответить, ответив на следующие подвопросы:

а). Какой тип поля я должен поместить в базу данных? (например, VARCHAR)

б) Какой тип объекта я должен использовать для хранения и управления изображением (на уровне объекта)? (например, java.awt.Image)

в) Как создать объект выбранного типа (ответ на вопрос б) из данных, полученных из базы данных?

d) Как сохранить объект выбранного типа (ответ на вопрос b) в базу данных?

e) Как нарисовать изображение на веб-странице?

Я использую PostgreSQL, Java, и это веб-приложение.

Спасибо!

Ответы [ 2 ]

5 голосов
/ 16 мая 2010

a) Какой тип поля я должен поместить в базу данных? (например, VARCHAR)

Изображение является двоичными данными. Просто используйте двоичное поле. В PostgreSQL это bytea.

б) Какой тип объекта я должен использовать для хранения и управления изображением (на уровне объекта)? (например, java.awt.Image)

Используйте InputStream или byte[] для его хранения. Java 2D API имеет классы / методы, которые могут принимать / возвращать любой из этих типов.

в) Как создать объект выбранного типа (ответ на вопрос б) из данных, полученных из базы данных?

Используйте ResultSet#getBinaryStream(), чтобы получить InputStream этого или ResultSet#getBytes(), чтобы получить byte[] этого.

d) Как сохранить объект выбранного типа (ответ на вопрос b) в базе данных?

Используйте PreparedStatement#setBinaryStream() или PreparedStatement#setBytes(). Примечание: если вы новичок в JDBC / PreparedStatement, то я рекомендую вам ознакомиться с базовым учебным пособием по JDBC Sun .

e) Как нарисовать изображение на веб-странице?

Используйте элемент HTML <img>, чей src указывает на URL, соответствующий url-pattern из Servlet. Вы можете передать идентификатор изображения в качестве параметра запроса или pathinfo. Внутри Servlet вы просто записываете полученный InputStream в OutputStream ответа обычным способом Java IO. Вы можете найти пример кода в этом ответе Я отправил некоторое время назад.


Тем не менее, хранение только необработанных изображений в базе данных, как правило, не очень хорошая идея. Желательно также хранить некоторые метаданные, такие как тип контента (например, image/jpeg, image/gif и т. Д.), Которые вам, в конце концов, нужны в заголовке ответа, чтобы браузер знал, что делать с этим.

0 голосов
/ 16 мая 2010

Вы можете сохранить объект как BLOB-объект PostGreSQL. Они могут храниться в виде двоичных данных в базе данных. http://www.postgresql.org/files/documentation/books/aw_pgsql/node96.html может помочь. Затем вы можете записать двоичный ввод, используя Servlet OutputStream. Эта ссылка может помочь.

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