我正在开发一个由数据库支持的 Web 应用程序,该数据库将包含数百万张图像作为其主要内容。我正在使用 Spring MVC 编写 Java,并使用 JPA (EclipseLink) 连接到 Oracle 11g (11.2.0.1.0) 数据库。Web 服务器(运行 Tomcat)和数据库服务器是不同的机器。
我目前在我的对象模型中有这个代码:
@Lob @Basic(fetch=FetchType.LAZY)
@Column (name = "data_file")
private byte[] dataArray;
这会在我的表中产生一个 BLOB 列。方便的是,我可以使用 Oracle SQL developer 直接从数据库中查看图像。
问题是为了在 web 应用程序中显示图像,我需要一个实际的文件,最重要的是,我的理解是 Spring 要求该文件位于 web 应用程序目录中,或者至少在我专门将其配置为允许访问的其他位置。这意味着我需要创建图像的临时副本以便将它们显示给用户。我宁愿让图像只存在于数据库和网络应用程序都可以访问的一个位置,如果可能的话,我希望允许其他程序或机器用户进行读取访问。
我认为 BFILE 类型旨在允许数据库管理外部文件甚至远程文件。我可以将 BFILE 与 JPA 一起使用,它会满足我的需求吗?如果是这样,我将如何创建到 BFILE 列的映射?
我的目标是:
- 图像无需复制即可显示。
- 文件在 Oracle 中作为文件(而不是字符串路径)进行管理。
- 我可以使用 JPA。
- 文件位于允许读取访问的普通磁盘位置。
- 我可以在 Oracle SQL Developer 中查看图像。