2012-09-24 6 views
0

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

문제는 로컬로 그리고 프로젝트를 실행할 때 이미지를 볼 수 있다는 것입니다. 문제는 하나의 이미지에만 있습니다.

출력 내용은 다음과 같습니다.

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

이 정보가 로컬 호스트에있는 경우, 나는 이미지, 내가 온라인이 프로젝트를 취할 때, 나는 이미지를 볼 수없는 오전을 볼 수 있습니다.

어디에서나 매개 변수를 설정해야 이미지를 볼 수 있습니까?

기타 sout 문은 이미지를 볼 수있는 아래와 같습니다. read 방법은 보장되지

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

당신이 요청하는 모든 데이터를 읽을 수 :

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

귀하의 문제는 줄 수 있습니다.

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

는 "까지 읽어 len 바이트의 데이터를 입력 스트림에서 바이트 배열로 가져 오려고 시도하지만 len 바이트만큼 읽으려고 시도하지만 더 작은 수를 읽을 수 있습니다. 실제로 읽은 바이트 수는 정수로 반환됩니다. "

+0

"길이 내부 =="& "인덱스 -------"숫자가 같으면 모든 데이터를 읽음을 의미합니다. –

관련 문제