在JSF中存储图像的更好方法

时间:2014-10-24 12:55:17

标签: java hibernate postgresql jsf primefaces

首先,我使用以下内容:Java,JSF 2,Primefaces,JPA / Hibernate,PostgreSQL,Maven,Spring Framework。

我有一个大约有100.000行的表,可以增长更多。每个记录可以附加1,2或3个图像,因此我可以拥有大约300.000个应由系统处理的图像。问题是我需要一个具有性能和安全性的最佳解决方案,但我找不到它。用积极和消极的观点来看我的消化:

1ª - 将图像存储在如下目录中:'/ usr / local / share / images_system_a /'并仅保存表格中imagem的链接。       性能(GREAT):这对于PERFORMANCE非常有用,因为我不需要从数据库加载10MB的大图像,我只是从目录中获取图像。       安全(坏):这对SECURITY不利,因为用户可以随时“清理”此目录,并且所有应用程序图像都将丢失。

2ª - 将图像保存在表格中。      性能(坏):我认为这对性能非常不利,因为加载非常大的图像可以锁定应用程序,我不能让这种情况发生。       安全(伟大):随着图像在桌面内我觉得更安全,因为只有授权人员(我)才能访问数据库中的任何DML或DDL,我可以用crontab备份数据库(每天)以确保数据的安全性。

所以,我的大问题是我无法协调性能和安全性,我需要两者兼顾。我希望有人能给我一个更好的建议。

1 个答案:

答案 0 :(得分:1)

  

这对SECURITY不利,因为用户可以随时“清理”此目录,并且所有应用程序图像都将丢失。

为什么单个用户能够清除图片上传目录?这似乎更像是一个错误的概念,这是一个实际的问题?!​​

如果用户点击“删除我的文件” - 您只需从数据库中获取上传文件的链接,然后 从上传文件夹中删除相关文件。这不会对其他用户的图像产生任何影响。

您正在谈论基于网络的应用程序 - 为什么任何用户都可以直接访问任何文件夹?


我经常看到,人们会将文件存储在数据库中。这可能有一些优点,因为你不需要同步状态,但毕竟我更喜欢传统方式:

  • 数据库用于数据
  • filesystem用于文件。

但是没有关于此的通用答案..将数据存储在数据库中可能会带来优势 - 但最终:安全性不应该是任何问题案例。