首页 >数据库 >mysql教程 >从数据库转换 Blob 时,为什么我的'BufferedImage”为空?

从数据库转换 Blob 时,为什么我的'BufferedImage”为空?

Patricia Arquette
Patricia Arquette原创
2024-11-10 12:28:02840浏览

Why is my `BufferedImage` null when converting a Blob from a database?

将 BufferedInputStream 转换为图像

从数据库转换 Blob 时遇到问题,您认为该 Blob 是 JPEG 格式的图像,进入 BufferedImage 进行进一步处理。转换失败,您的 Image 变量仍为空。

转换失败的可能原因

检查您的代码后,有几个潜在问题可能导致转换失败:

  1. 数据检索:代码使用以下方式检索 blob 数据blob.getBytes(1, blobLength)。但是,blobLength 是以 long(64 位整数)形式获取的,而 getBytes 则需要 int(32 位整数)。这种不匹配可能会导致数据截断和不正确的图像检索。
  2. 图像验证:确保 uploadedInputStream 流包含有效的图像将是一个很好的起点。您可以使用 ImageIO.write 将图像临时写入文件,然后读回以验证其完整性。
  3. Blob 内容处理: 根据 H2 数据库文档,Blob 内容不存储在内存中。因此,您应该使用 blob.getBinaryStream 来检索 blob 的流表示形式,而不是使用 blob.getBytes。

解决方案

解决问题,尝试修改您的代码如下:

public Response post(@PathParam("id") String id) throws IOException {
    Connection con = connection();
    Blob blob = getPhoto(con);
    BufferedImage image = null;
    InputStream blobStream = null;
    int blobLength = 0;
    try {
        blobLength = (int) blob.length();
        blobStream = blob.getBinaryStream(1, blobLength);
        image = ImageIO.read(blobStream);
    } catch (SQLException e2) {
        e2.printStackTrace();
    }  

    return Response.ok(image).build();
}

此外,您应该验证有效性通过将 uploadedInputStream 写入文件并将其读回以确保它包含图像。

以上是从数据库转换 Blob 时,为什么我的'BufferedImage”为空?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn