如何存储文件并将其引用到java Web应用程序?

时间:2015-07-11 16:07:52

标签: java database file fileserver

看起来存储文件是基本的东西,但是偶然发现了一定的问题。以下是我在JAVA编程时在服务器上存储文件的理解。

  1. 您无法存储在mysql中,因为如果文件很重,则不建议使用。所以,我决定不选择这个。

  2. 也不建议将文件存储在容器中,例如Tomcat或Wildfly,可能是因为它需要部署并且类似的东西?

  3. 你绝对可以存储文件,Apache文件服务器?我很困惑。我们可以这样做,并将文件存储在这里,将其引用到数据库中吗?这与网站存储图像或文件的方式类似吗?

  4. 我也遇到过一些像NoSql这样的数据库,但是我没有深入研究,认为最后可能是错的,我本可以把时间花在其他东西上。

  5. 这样说,在服务器中存储文件,在JAVA Web应用程序上引用它并将其记录在数据库中的好方法是什么?

2 个答案:

答案 0 :(得分:1)

我们通常不会将文件放在数据库(NoSQL或RDBMS)中,因为它们不是文件系统。如果有人上传文件,则将其存储在文件系统中,并可能在数据库中记录名称和其他元数据以备将来使用。您可以从技术上将文件的内容放在数据库中,它有自己的优点和缺点 - https://softwareengineering.stackexchange.com/a/150787/156860

建议不要将上载的文件驻留在Web / app服务器中,因为您可能有多个服务器来处理负载,如果您将文件放在一个服务器中,则另一个服务器可能在访问内容时遇到问题。如果一台服务器出现故障,该服务器中的文件将无法供其他服务器使用。您可能需要一个共享的驱动器/磁盘,所有服务器都可以连接并读取该文件。

JavaEE通过提供资源适配器来处理这个问题,该资源适配器抽象出应用程序如何与资源交互'通常(也可以是文件或其他资源)。但是如果没有关于什么样的文件,有多大以及如何使用它们的更多细节,那么很难找到''这个问题的解决方案。

答案 1 :(得分:0)

这取决于你的用例是什么。如果你更深入地了解你想要解决的问题,你应该得到更好的回应。

我认为一般来说,像Amazon's S3这样的云解决方案非常普遍,很好,并且很容易使用。您还可以获得服务器的好处,不一定必须自己提供文件,这意味着非基于文件的请求的带宽更多。

  

您无法存储在mysql中,因为如果文件很重,则不建议使用。所以,我决定不选择这个。

这实际上取决于你正在做什么,如果你有高流量和大文件,那么这不会很好地扩展。如果您的流量较小且文件较少,则没有理由认为这不是一个可行的解决方案。

  

也不建议将文件存储在容器中,例如Tomcat或Wildfly,可能是因为它需要部署并且类似的事情?

不完全确定“in”容器的含义,你的意思是在war文件中吗?还是在本地文件系统上?通常不建议但是,它实际上取决于流量,文件大小等。本地文件系统可以工作,但你应该使用像NFS这样的东西,所以如果服务器发生故障,文件就不能用了它

我见过人们使用本地文件系统和git来存储通过服务器保存的文本文件。这给了他们冗余和版本。

  

你绝对可以存储文件,Apache文件服务器?我很困惑。我们可以这样做,并将文件存储在这里,将其引用到数据库中吗?这与网站存储图像或文件的方式类似吗?

我从来没有亲自使用过Apache文件服务器,但是你有什么困惑呢?在做了一个简单的Google后,它看起来基本上只是一个Apache服务器,这意味着你发出HTTP请求来存储和检索文件。这与S3的工作原理类似,所以我认为它可能是一个很好的通用解决方案。

  

我也遇到过一些数据库,比如NoSql,但我没有深入研究,认为最后可能会出错,而且我会把时间花在其他东西上。

您选择的实际NoSql解决方案将拥有自己的要求,因此我不能说解决方案有多好,但同样,它实际上取决于您的流量和文件大小。我使用的NoSql解决方案都有HTTP接口,因此使用它们与Apache或S3没有什么不同。最大的区别是你必须像NoSql解决方案中的数据库那样查询文件,但这些查询通常是通过HTTP发送的,所以并非真的那么不同。