1

我正在尝试从数据库中检索图像。目前我能够展示:

    `com.mysql.jdbc.Blob@2aba2aba `

在我的jsp输出中。我可以知道如何将其转换为图像吗?

我用下面的来调出上面的

photo[i].getPhotoFileData();
4

3 回答 3

3

与您的 JSP 相比,HTML 文档的工作方式是一个更大的问题。您需要了解 HTML 不会直接嵌入图像。相反,它使用<img>标签来引用托管在不同 URL 上的图像。

为了在 HTML 页面上显示存储在数据库中的图像,您需要一个单独的 servlet 来处理对图像的请求。您的 JSP 应该呈现如下 HTML 文档:

<html>
  <head>
  ...
  </head>
  <body>
    ...
    <img src="www.mydomain.com/images/1234.png" />
    ...
  </body>
</html>

然后,您将创建一个单独的 servlet 来处理对 /images 的所有请求,这将进行数据库调用并将原始字节从 blob 发送回响应的输出流。确保还根据您使用的图像编码正确设置 Content-Type 标头。

为了将图像发送回请求者,您有两个选项之一。您可以将 blob 的字节作为数组获取并将其写入 OutputStream(例如out.write(blob.getBytes(0,blob.length());)。或者您可以使用该getBinaryStream()方法,然后将字节从 InputStream 复制到 OutputStream。这是一个例子:

public static void copy(Blob from, OutputStream to)
    throws IOException {
  byte[] buf = new byte[4096];
  try(InputStream is = from.getBinaryStream()) {
    while (true) {
      int r = is.read(buf);
      if (r == -1) {
        break;
      }
      to.write(buf, 0, r);
    }
  }
}

NB:这段代码没有经过测试甚至编译,它应该只是作为一个起点。

于 2012-07-23T17:04:53.253 回答
1

You're getting a Blob object - not it's contents. If you want to get raw byte data you have to ask the Blob object for it, e.g.:

Blob blob =  photo[i].getPhotoFileData();
byte[] data = blob.getBytes(0, blob.length());

If you want to create an image on the fly, then just call:

BufferedImage img = ImageIO.read(new ByteArrayInputStream(data));

You can then save the image or ... actually I don't know what else. Thing. Stuff. Display it. Print. Limitless possibilities! Just like at zombo.com!

于 2012-07-23T18:26:36.073 回答
0

首先将 blob 转换为输入流到 string 。然后使用该 String 而不是图像 URL 。

将 blob 转换为字符串

        try {
            Blob blob = staticOffer.getImage(); //blob of image from db
            strOut = new StringBuffer();
            String aux;
            BufferedReader br;

            br = new BufferedReader(new InputStreamReader(blob.getBinaryStream()));
            while ((aux=br.readLine())!=null) {
                strOut.append(aux);
            }
            offerPicStr = strOut.toString();

        } catch (Exception e) {
            e.printStackTrace();
        }

现在以下列方式使用该字符串 html/jsp

<img src="data:image/jpeg;base64,${offerPicStr}" width="100" height="100"></img>
于 2015-11-20T12:29:28.653 回答