Java 如何在数据库中更好地保存带有图像的丰富字符串内容?

Java 如何在数据库中更好地保存带有图像的丰富字符串内容?,java,mysql,database,string,image,Java,Mysql,Database,String,Image,当我将带有图像的丰富字符串内容保存到数据库中时,我遇到了一个问题,为此,我手头有一些解决方案: 首先将字符串内容的图像放在硬盘上,然后保存包含这些图像路径的字符串内容,对于稍后在页面上显示丰富的字符串内容,有两种方法: 如果图像包含在带有绝对路径的字符串内容中,我们将直接在页面上显示它,但这种方式可能会遇到域URL更改的问题,这意味着如果我们的系统部署在另一台机器或URL上,这些图像将无法再正确显示 如果图像包含在具有相对路径的字符串内容中,为了确保字符串内容可以显示在所有路径页面上,我们需

当我将带有图像的丰富字符串内容保存到数据库中时,我遇到了一个问题,为此,我手头有一些解决方案:

  • 首先将字符串内容的图像放在硬盘上,然后保存包含这些图像路径的字符串内容,对于稍后在页面上显示丰富的字符串内容,有两种方法:
    • 如果图像包含在带有绝对路径的字符串内容中,我们将直接在页面上显示它,但这种方式可能会遇到域URL更改的问题,这意味着如果我们的系统部署在另一台机器或URL上,这些图像将无法再正确显示
    • 如果图像包含在具有相对路径的字符串内容中,为了确保字符串内容可以显示在所有路径页面上,我们需要在图像路径前面动态添加域路径,这会导致性能低下,而且非常复杂
  • 使用一种支持存储字符串和图像流的新型列,但我不确定这是否现实
我使用Java语言进行编程,使用MySQL作为数据库。那么,对我来说,最好的方法是什么呢?我知道这是Web开发中的常见情况


非常感谢。

据我所知,目前方法二在RDBMS中没有直接的方法。没有存储字母数字和字节的数据类型

你只有方法一。正如你所指出的,两者都有利弊。但是,我建议如下,而不是采用建议的两种方法(绝对路径和相对路径)

  • 将数据库中的所有图像保存在单独的表中。(这允许您控制上载图像的大小,并且在迁移到不同系统时,只需要数据库迁移,不需要文件系统迁移)。表可以有列id、文件名、扩展名、mime_类型、长度等
  • 使用服务方法将图像文件保存在数据库表中,并返回唯一的图像id
  • 为图像检索创建单独的GET方法,例如:-
    http://localhost/image/{id}
    将返回步骤2返回的id的图像
  • 当您使用图像获取丰富内容时,请使用步骤2创建的服务方法保存图像,然后获取id,将其附加到步骤3中创建的图像检索url中,并将其放置在丰富内容中,然后将其保存为文本值

    例:-

    Abc定义
    

    希望这能解决您的问题。

    Tks@shazin!!这听起来是个好主意。正如您所教的,像验证代码的实现一样,图像检索方法需要将此图像流写入响应,对吗?这种解决方案可能会导致性能问题,因为每次图像检索时,它都会在内存中读取并写入响应,相反,如果我们通过Web服务器的静态访问方式直接使用URL访问图像,它将非常高效,对吗?但是无论如何,如果有最好的解决办法,我愿意接受你的建议。非常感谢。
    Abc def <img src="/image/{id}">