如何使用Java和PostgreSQL在Web应用程序中保存,检索和绘制图像?

时间:2010-05-16 00:02:56

标签: java jsp postgresql servlets

给定一个物体X;我希望这个对象有一个图像。图像必须存储在数据库中。我无法存储路径,实际图像必须在数据库中。

回答以下问题可以回答我的问题:

A)。我应该在数据库中放入什么类型的字段? (例如VARCHAR)

b)我应该使用什么类型的对象来存储和操作图像(在对象层)? (例如java.awt.Image)

c)如何从数据库中获取的数据创建所选类型的对象(问题b的答案)?

d)如何将所选类型的对象(问题b的答案)保存到数据库?

e)如何在网页上绘制图像?

我正在使用PostgreSQL,Java,它是一个Web应用程序。

谢谢!

2 个答案:

答案 0 :(得分:5)

  

a)我应该在数据库中放入什么类型的字段? (例如VARCHAR)

图像是二进制数据。只需使用二进制字段。在PostgreSQL中它是bytea

  

b)我应该使用什么类型的对象来存储和操作图像(在对象层)? (例如java.awt.Image)

使用InputStreambyte[]进行存储。 Java 2D API具有可以获取/返回这些类型的类/方法。

  

c)如何从数据库中获取的数据创建所选类型的对象(问题b的答案)?

使用ResultSet#getBinaryStream()获取InputStreamResultSet#getBytes()获取byte[]

  

d)如何将所选类型的对象(问题b的答案)保存到数据库?

使用PreparedStatement#setBinaryStream()PreparedStatement#setBytes()。注意:如果您刚接触JDBC / PreparedStatement,那么我建议您完成Sun basic JDBC tutorial

  

e)如何在网页上绘制图像?

使用HTML <img>元素,其src指向与url-pattern的{​​{1}}匹配的网址。您可以将图像标识符作为请求参数或pathinfo传递。在Servlet内部,您只需将获得的Servlet写入响应的InputStream,这是通常的Java IO方式。你可以在我前一段时间发布的this answer中找到一个代码示例。


也就是说,将原始图像存储在数据库中通常不是一个好主意。您最好还应该在其中存储一些元数据,例如content type(例如OutputStreamimage/jpeg等),您需要在响应标头中,以便浏览器知道要做什么做它。

答案 1 :(得分:0)

您可以将对象另存为PostGreSQL blob。它们可以作为二进制数据存储在数据库中。 http://www.postgresql.org/files/documentation/books/aw_pgsql/node96.html可以提供帮助。然后,您可以使用Servlet OutputStream编写二进制输入。这link可能会有所帮助。