我正在创建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
答案 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个字节,但可以读取较小的数字。实际读取的字节数返回为一个整数。“