Java EE持久化图像

时间:2013-06-11 13:21:44

标签: java image java-ee jpa ejb

我的应用程序(s')架构看起来像这样。我有一个用于管理Web商店的桌面Java应用程序。这包括创建产品并将图像上传到保留产品的应用程序服务器。我正在使用ejbs。

这是第一个也是主要问题。应该如何添加/上传图片?许多建议说你不应该将图像保存为blob,因为这会破坏性能,特别是当你有大量的读取时,例如这里。另一方面,不鼓励保存到文件系统,因为废旧模块化和EJB不应该这样做。这些是非常对立的建议。另一方面,如果我想为一个byte[]类保存多个文件(Product),我不知道该怎么做。列表似乎不正确,byte[][]将如何保留?在线所有示例仅适用于一个文件/图像。

这个问题标记着另一个问题。根据图像的保存方式,我应该如何在Web应用程序中获取它们?发送它们时,它们应该以某种方式“缓存”,因此它们可以是热链接的,或者当用户点击它们时它们是缩略图。

2 个答案:

答案 0 :(得分:2)

回答有关通过Web应用程序获取存储在Web服务器中的图像的部分。

在Web应用程序中实现一个过滤器类,它将将url映射到存储在文件系统或blob中的实际图像。网址应包含对图片ID的引用,过滤器应该知道如何使用图片ID检索实际图像。此外,如果您保持此路径一致并具有正确的过期标头,则浏览器将负责缓存图像。

我个人更喜欢将图像存储在文件系统而不是数据库中,因为数据库没有针对这种东西进行优化。 请参阅Storing Images in DB - Yea or Nay?以决定是将图像存储为blob还是文件。

答案 1 :(得分:1)

尽量保持简洁务实; - )

我同意不将图片保存在BLOB中只是将它们上传到目录,但是在数据库中管理它们。

例如:将图像上传到服务器,为其文件名生成唯一ID并保存。然后将ID添加到图像数据库并将其链接到文章数据库。因此,您可以在一个易于获取和实现的产品上管理多个图像的1..N关系。此后,删除文章的管理也支持更容易删除,更新图像等。

此外,请尝试不以任何方式使用代表产品的文件名/链接。您可能希望为多个文章/产品使用相同的图像。