无法显示图像

时间:2012-09-24 17:50:20

标签: java mysql

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

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

当此信息在 localhost上时,我可以查看图片,但是当我在线播放此项目时,我无法查看图片

我是否需要在任何地方设置任何参数,以便我可以看到图像。

其他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

1 个答案:

答案 0 :(得分:0)

你的问题可能就是这句话:

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

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

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

“将来自输入流的len个字节的数据读入一个字节数组。尝试读取len个字节,但可以读取较小的数字。实际读取的字节数返回为一个整数。“