2012-09-24 204 views
0

我正在創建Web應用程序,將圖像作爲MEDIUMBLOB存儲在MYSQL數據庫中,並在瀏覽器中顯示它們。無法顯示圖像

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 
+0

存儲圖像的路徑而不是數據庫中的圖像,事情會變得更加順暢 – Ibu

+0

@Ibu:我知道這是最好的解決方案,但問題是我已經完成了80%的編碼,並且使BLOB成爲路徑乏味。如您所見, –

回答

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字節一樣多的數據,但可以讀取較小的數字,實際讀取的字節數作爲整數返回。

+0

,「length ==」和「index -------」數字相同,意味着所有數據都被重新計算。 –