如何使用Java和PostgreSQL在webapplication中保存,检索和绘制图像?

2 java postgresql jsp servlets

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

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

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

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

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

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

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

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

谢谢!

Bal*_*usC 5

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

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

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

使用InputStreambyte[]存储它.Java 2D API具有可以接受/返回这些类型的类/方法.

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

使用ResultSet#getBinaryStream()得到一个InputStream它或ResultSet#getBytes()得到byte[]它.

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

使用PreparedStatement#setBinaryStream()PreparedStatement#setBytes().注意:如果您还是JDBC /的新手PreparedStatement,那么我建议您学习Sun基础JDBC教程.

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

使用HTML <img>元素,其src指向匹配的URL url-patternServlet.您可以将图像标识符作为请求参数或pathinfo传递.里面的Servlet你只写所获得InputStreamOutputStream响应通常的Java IO方式.你可以在我之前发布的这个答案中找到一个代码示例.


也就是说,仅将原始图像存储在数据库中通常不是一个好主意.您最好还应该在其中存储一些元数据,例如您在响应头中需要的内容类型(例如image/jpeg,image/gif等),以便浏览器知道如何处理它.