【问题标题】:How to store file and reference it to java web application?如何存储文件并将其引用到 Java Web 应用程序?
【发布时间】:2015-09-30 06:48:51
【问题描述】:

看起来存储文件是一种基本的事情,但我偶然发现了某些问题。这是我在用 JAVA 编程时在服务器上存储文件的理解。

  1. 不能存储在mysql中,因为如果文件比较重,不推荐。所以,我决定不选择这个。

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

  3. 你绝对可以存储文件,Apache File server?我对此感到困惑。我们可以这样做,并将文件存储在此处,将其引用到数据库吗?这与网站存储图像或文件的方式相似吗?

  4. 我也接触过一些数据库,比如 NoSql,但我没有深入,认为最后可能是错误的,我会把时间花在其他东西上。

这么说,有什么好办法将文件存储在服务器中,在JAVA web应用程序中引用,然后记录在数据库中?

【问题讨论】:

  • 文件是部署的一部分吗?或者这是由服务器生成的?还是上传?
  • 假设它是上传的文件,我想将它存储在文件服务器上以备后用。
  • 第3点:引用到数据库问题:在Java web应用程序上引用它并记录在数据库中,你能在这里解释一下数据库中到底存储了什么吗?
  • 所以,我将有一个字节数组中的文件,并且我想存储该文件,将其存储在数据库中会很昂贵,正如我所听说的那样。因此,将该文件放在其中一台服务器中,然后将该文件的引用存储在数据库中。有可能吗?
  • 绝对有可能!如果您希望数据库无法处理文件,这不是一个坏主意。当然会有一点开销,因为您需要将文件操作与数据库信息同步。只需将文件的 URI 存储在数据库中就可以了。

标签: java database file fileserver


【解决方案1】:

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

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

JavaEE 通过提供一个资源适配器来处理这个问题,该适配器抽象了应用程序通常如何与“资源”(也可以是文件或其他一些资源)交互。但是,如果没有关于文件类型、大小和使用方式的更多详细信息,就很难找到问题的“解决方案”。

【讨论】:

    【解决方案2】:

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

    我认为一般来说,像 Amazon's S3 这样的云解决方案现在非常普遍、良好且易于使用。您还可以从您的服务器中受益,不必自己为文件提供服务,这意味着非基于文件的请求需要更多带宽。

    不能存储在mysql中,因为如果文件比较重,不推荐。所以,我决定不选择这个。

    这真的取决于你在做什么,如果你有高流量和大文件,那么这将不会很好地扩展。如果您的流量低且文件小,那么这不是一个可行的解决方案。

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

    不太清楚您所说的“在”容器中是什么意思,您是指在您的战争文件中吗?还是在本地文件系统上?通常不建议这样做,但同样,它确实取决于流量、文件大小等。本地文件系统可以工作,但您应该使用NFS 之类的东西,因此如果服务器出现故障,文件不要使用它。

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

    你绝对可以存储文件,Apache File server?我对此感到困惑。我们可以这样做,并将文件存储在此处,将其引用到数据库吗?这与网站存储图像或文件的方式相似吗?

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

    我也接触过一些数据库,比如NoSql,但我没有深入,认为最后可能是错误的,我会把时间花在其他东西上。

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

    【讨论】:

      猜你喜欢
      • 2015-09-08
      • 2011-02-27
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 2012-12-31
      • 2011-03-26
      • 2013-08-01
      相关资源
      最近更新 更多