1

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

4

3 回答 3

4

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

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

于 2012-06-30T17:17:32.733 回答
2

你可以选择它:

  1. 数据库- 你有一个积极的观点,它可以与记录相关联并且永远不会是孤立的(取决于你的模型)。对于备份来说,在数据库增加的情况下会有点痛苦。

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

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

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

于 2012-06-30T17:18:38.330 回答
0

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

可能的解决方案:
A. 为用户存储一个图像名称,并约定从文件系统中众所周知的目录存储/加载。
B. 将图像作为 blob 存储在您的数据库中。考虑检查@Lob 注释

于 2012-06-30T17:11:25.337 回答