0

我正在创建 Web 应用程序,我在 MYSQL DB 中将图像存储为 MEDIUMBLOB 并在浏览器上显示它们。

PreparedStatement psmt = con.prepareStatement("SELECT pdfImage FROM pdfInfo WHERE pdfinfoid=?");
psmt.setString(1, what);
ResultSet rs1 = psmt.executeQuery();

while (rs1.next()) {
    System.out.println("inside rs1.mext");
    String imgLen = rs1.getString(1);
    System.out.println(imgLen.length());
    int len = imgLen.length();
    System.out.println("length inside == " + len);
    byte[] rb = new byte[len];
    InputStream readImg = rs1.getBinaryStream(1);
    InputStream inputStream = readImg;
    int index = readImg.read(rb, 0, len);
    System.out.println("index----------------" + index);
    response.reset();
    response.setHeader("Content-Length", String.valueOf(len));
    response.setHeader("Content-disposition", "inline;filename=/file.png");
    response.setContentType("image/png");
    response.getOutputStream().write(rb, 0, len);
    response.getOutputStream().flush();
}

问题是我能够在本地看到图像以及当我进行项目时。问题仅在于一张图像。

sout 语句的输出如下。

INFO: inside rs1.mext
INFO: 5942414
INFO: length inside == 5942414
INFO: index----------------5942414
INFO: leng here is 5942414

当此信息在本地主机上时,我可以查看图像,但是当我将此项目联机时,我无法查看图像

我是否需要在任何地方设置任何参数才能看到图像。

其他 sout 语句如下,我可以看到图像。

INFO: inside rs1.mext
INFO: 204999
INFO: length inside == 204999
INFO: index----------------204999
INFO: leng here is 204999



INFO: inside rs1.mext
INFO: 515274
INFO: length inside == 515274
INFO: index----------------515274
INFO: leng here is 515274
4

1 回答 1

0

你的问题可能是这样的:

int index = readImg.read(rb, 0, len);

read方法不能保证读取您请求的所有数据。

http://docs.oracle.com/javase/6/docs/api/java/io/InputStream.html#read(byte[],%20int,%20int)

“从输入流中读取最多 len 个字节的数据到一个字节数组中。尝试读取 len 个字节,但可以读取较小的字节数。实际读取的字节数以整数形式返回。 "

于 2012-09-24T20:27:33.617 回答