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

标签 java database file fileserver

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

  1. 不能存储在mysql中,因为如果文件很大的话,不建议这样做。所以,我决定不选择这个。

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

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

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

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

最佳答案

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

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

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

关于java - 如何存储文件并将其引用到java Web应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31359083/

相关文章:

c - 在文件中逐行存储巨大的数组会导致文件损坏

Java For循环计数器在调用递归方法时不工作

mysql - 通过 1 个公共(public)单列连接两个 MySQL 表

sql - *= 是哪个比较运算符

database - Oracle中通过脚本创建新表时将列名更改为大写如何解决?

c# - 在 C# 中可以打开的最大文件数是否有限制?

ruby - 有没有一种更简洁的方法使用 podio gem 在 Ruby 中将 xlsx 对象转换为 csv

java - 如果主引用指向null,则WeakReference或SoftReference有何不同?

java - try/catch 语句中有效最终变量的赋值

java - 从 JTable 获取值并将其设置到 JTextField 中