在Spring MVC Hibernate应用程序中,我应该在哪里保存用户图像?

时间:2012-06-30 17:06:29

标签: java hibernate spring-mvc

我正在使用MySQL创建一个Spring MVC Hibernate应用程序。我应该在哪里保存用户图像:在数据库或某个文件夹中,例如WEB-INF/下?

3 个答案:

答案 0 :(得分:4)

当然不在WEB-INF内。您可能希望将它们保存在文件系统中,但不能保存在webapp的目录中。首先,如果将应用程序打包为战争,它很可能不存在。其次,一旦重新部署应用程序,就会失去一些东西。桌面应用程序不会将其用户数据存储在其安装目录中,是吗?它应该与webapps相同。

现在,由于图像通常很大,而且它们无法搜索,您可能希望将它们存储在文件系统中,并且只将它们的名称,路径,哈希和/或mime类型存储到数据库中。但这取决于您的应用程序,如果它们需要由其他应用程序提供/使用,如果这些应用程序可以访问数据库和/或文件系统等等。您决定。

答案 1 :(得分:2)

您可以选择它:

  1. 数据库 - 您有一个积极的一点,即它可以与记录相关联,永远不会是孤儿(取决于您的型号)。对于备份,对于数据库增加的情况来说有点痛苦。

  2. FileSystem - 备份工具,因为这些是物理文件,rsynch进程就足够了。另一个积极的一点是你减少了DB的IO。虽然,很难在文件和存储在数据库中的记录之间附加逻辑(你有分布的东西),所以你不确定文件是否被删除,并且仍然有一些记录引用它DB。

  3. 如果选择了filesystem选项,请将其置于应用程序目录结构之外(为文件准备专用位置) 。不应修改应用程序目录,在重新部署时会造成一些痛苦。您可以使用符号链接。

    对于图像,可能你想要执行一些缩略图等等,使用FileSystem选项会更便宜。

答案 2 :(得分:0)

这取决于你想要完成的事情。
如果这些是静态图像,并且您拥有固定数量的用户,则可以考虑在WEB-INF /下保存它们。
但是,很可能情况并非如此,并且您拥有不同数量的用户,并且您必须为每个用户存储用户。

可能的解决方案:
A.用户存储图像名称,并具有从文件系统中的已知目录存储/加载的约定。
B.将图像存储为数据库中的blob。请考虑查看@Lob annotation