2010-05-16 11 views
3

Ajax를 사용하여 데이터베이스에서 이미지를 읽으려고했으나 xmlhttp.responseText을 img src로 읽을 수 없습니다. 이미지는 데이터베이스에 바이너리 데이터로 저장되며 바이너리 데이터로도 검색됩니다. 저는 JSP로 Ajax를 사용하고 있습니다. 사용자가 이미지를 업로드 할 수있게하고 마지막으로 업로드 한 이미지를 볼 수 있기 때문에 마우스 오버 액션에서 Ajax가 활성화되어 이미지를 다시 얻습니다. 문제는 응답에서 img.Ajax를 사용하여 데이터베이스에서 이미지 가져 오기

이 아약스 기능입니다 :

10415315 [TP-Processor1] WARN core.MsgContext - Error sending end packet 
java.net.SocketException: Broken pipe 
    at java.net.SocketOutputStream.socketWrite0(Native Method) 
    at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92) 
    at java.net.SocketOutputStream.write(SocketOutputStream.java:136) 
    at org.apache.jk.common.ChannelSocket.send(ChannelSocket.java:537) 
    at org.apache.jk.common.JkInputStream.endMessage(JkInputStream.java:127) 
    at org.apache.jk.core.MsgContext.action(MsgContext.java:302) 
    at org.apache.coyote.Response.action(Response.java:183) 
    at org.apache.coyote.Response.finish(Response.java:305) 
    at org.apache.catalina.connector.OutputBuffer.close(OutputBuffer.java:281) 
    at org.apache.catalina.connector.Response.finishResponse(Response.java:478) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:154) 
    at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:200) 
    at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:283) 
    at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:773) 
    at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:703) 
    at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:895) 
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685) 
    at java.lang.Thread.run(Thread.java:619) 
10415316 [TP-Processor1] WARN common.ChannelSocket - processCallbacks status 2 
+0

이미지 데이터를 가져 오는 URL을 가리 키도록 이미지의 src 속성을 설정할 수 없습니까? 정말로 "아약스"를 사용하는 이유가 있습니까? –

+1

지금까지 작성한 코드를 게시 할 수 있습니까? 당신이 한 일과 어떻게했는지, 상상해 보는 것은 매우 어렵습니다. – Oded

+0

Cripes, 멋진 애들이 사용하기 때문에 "아약스"사용을 중지하십시오 ... 여기 XHR을 사용하는 것은 의미가 없습니다. –

답변

2

왜 당신은 DB에 이미지를 저장됩니다

function ajaxFunction(path) { 
    if (xmlhttp) { 
     var s = path; 
     xmlhttp.open("GET", s, true); 
     xmlhttp.onreadystatechange = handleServerResponse; 
     xmlhttp.send(null); 
    } 
} 

function handleServerResponse() { 
    if (xmlhttp.readyState == 4) { 
     var Image = document.getElementById(Image_Element_Name); 
     document.getElementById(Image_Element_Name).src = "data:" + xmlhttp.responseText; 
    } 
} 

나는 또한 서버에서 예외가있어? 파일로 저장하고 URL을 DB에 저장하십시오.

당신의 DB를 읽어들이는 PHP를 호출 할 이미지의 URL을 빼고 당신에게 그것을 반환 할 AJAX를 사용할 수 있습니다, 그래서 당신은 같은 것을 할 수있는 방법은 다음 아니라고

img = document.getElementById("myimage"); 
img.src = URL; // where URL will contain the URL you got from the AJAX call 
+0

파일을 사용하고 싶지 않고 AJAX 및 JSP 파일을 사용하여 제한합니다. – ama

+0

이유를 묻는 수 있습니까?파일 시스템에 저장하는 것에 대한 흥미로운 토론은 DB http://www.webmasterworld.com/forum88/9091.htm – nico

+0

앞서 제안한 것처럼 이미지를 가져 오는 URL에 src를 설정하는 것이 가장 좋습니다. 또한 URL에서 이미지를 가져 오는 많은 코드가 필요하지 않습니다. –

0

을 어떻게 작동하는지. 전에 대답했듯이 기본적으로 <img> 요소의 src 속성을 다른 URL로 변경하면됩니다. 그러면 웹 브라우저가 이미지 자체를 자동으로 다시로드합니다. JSP/서블릿의 경우

의 URL은 데이터베이스에서 이미지의 InputStream을 얻고 응답의 세트와 함께 응답의 OutputStream에 보통 자바 입출력 방식을 쓰는 Servlet 클래스를 가리켜 야한다 헤더. this answer에서

function changeImage(newSrc) { 
    document.getElementById(Image_Element_Name).src = newSrc; 
} 

당신이 Servlet의 모습 방법 완전한 예를 찾을 수 있습니다 여기에

은 자바 스크립트가 아닌 같이하는 방법입니다.


SocketException: broken pipe는 클라이언트 측 모두에서 응답을 처리하고 그것을 중단하지 않았다 단지 기호입니다. 만약 당신이 Ajax를 없애고 위에서 설명한 것처럼한다면, 완벽하게 작동해야합니다.

+0

네, 그게 제가 DB에서 이미지를 얻으려고 한 것입니다. 문제는 jsp 파일에 대한 요청을 보내는 것이 었습니다. 요청에 매개 변수로 시간을 추가하면 브라우저가 매번 새로운 요청을 발견하여 이미지에 대한 새 src가 표시되고 브라우저가 이미지를로드합니다. – ama

+0

그래서 문제가 무엇입니까? – BalusC

+0

지금 아무런 문제가 없습니다, 난 그것을 해결, thnx – ama

관련 문제