0

画像をMYSQLDBにMEDIUMBLOBとして保存し、ブラウザに表示するWebアプリケーションを作成しています。

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();
}

問題は、ローカルで、プロジェクトをライブで撮影したときに画像を見ることができることです。問題は1つの画像のみにあります。

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 に答える