0

我有一个 java webapp,它需要通过 http 上传文件,然后将它们存储在服务器上。这些文件需要与 Oracle 数据库中的特定记录相关联,因此数据库中将有一个表存储对关联记录的引用、对文件的引用以及其他描述性数据,例如标题等。选项因为这张表似乎是:

  • 将文件存储为 BLOB
  • 存储对文件的 BFILE 引用
  • 存储一个包含文件路径的字符串

我们更愿意将文件存储在数据库之外,因此我们不会将其存储为 BLOB。DBA 表示他们的首选选项是将引用存储为 BFILE。oracle.sql.BFILE 对象提供对 InputStream 的访问以读取文件,但没有明显的写入方式。

当对存储目录的唯一引用是 Oracle 目录别名时,将文件数据写回磁盘的最佳方法是什么?


我们认为简单的 java.io 是写入文件的最佳方式,这意味着存储目录必须作为挂载可供 Web 应用程序服务器使用。由于该目录无论如何都可用于 webapp,因此我们决定不需要 BFILE,而只是将文件名存储在数据库中。

4

2 回答 2

1

根据Oracle JDBC Developers Guide - 14.6 Working with BFILEs

  • BFILE 是只读的。您不能插入数据或以其他方式写入 BFILE。
  • 您不能使用 JDBC 创建新的 BFILE。它们仅在外部创建。

因此,您似乎需要一个单独的工具/方法将数据上传到 Oracle 存储目录,这可能使 BFILE 成为您的方案的错误选择。

于 2009-07-14T10:04:01.980 回答
1

“我们更愿意将文件存储在数据库之外”

为什么 ?您的备份/恢复方案是什么。例如,如果磁盘发生故障,您将如何恢复文件?这些文件纯粹是暂时的,所以您实际上不需要保留它们吗?

基本上,BFILE 是 BLOB 存储和简单地在数据库中存储路径之间的折衷方案。您以与常规文件相同的方式对其进行写入,然后使其“可用于”数据库以供读取。如果您的 web 应用程序运行在与数据库不同的物理服务器上,则您需要有一个两个盒子都可以访问的存储位置(以及适当的读/写权限)。

于 2009-07-14T22:54:31.880 回答