2013-03-27 2 views
0

자바에서 간단한 웹 서버를 구현하고 싶습니다. 문제는 이미지가 웹 브라우저에서 올바르게 렌더링되지 않는다는 것입니다. 내가 볼 수있는 건, localhost : 8888/image.png에 가면, 정확한 너비, 높이, 무게의 흰색 사각형입니다. 미리 감사드립니다. :) 여기 브라우저에서 http를 통해 이미지를 보내고 있습니다.

코드입니다 :

public Http(Socket server) throws IOException { 
    in = new BufferedReader(new InputStreamReader(server.getInputStream())); 
    parseHeader(in); 
    String response = new String(); 
    out = new PrintWriter(server.getOutputStream(), true); 
    Files f = new Files(getHomePath() + httpRequestedPage); 

    if(!f.exists) { 
     // 404 ERROR 
    } else { 
      response += "HTTP/1.1 200 OK\r\n"; 
      response += "Date: " + nowDate + "\r\n"; 
      response += "Content-Type: image/png\r\n"; 
      response += "Content-Length: " + res.length() + "\r\n"; 
      response += "Connection: keep-alive\r\n"; 
      response += "\r\n"; 
      response += IOUtils.toString(new FileInputStream(getHomePath() + httpRequestedPage)); 
    } 

    out.println(response); 
    in.close(); 
    out.close(); 
} 

편집이 :

불행하게도이 같은 메시지를 반환합니다.

out = new PrintWriter(server.getOutputStream(), true); 

    OutputStream out2 = server.getOutputStream(); 
    File file = new File(HttpServer.getHomePath() + httpRequestedPage); 
    InputStream stream = new FileInputStream(file); 


    String response = new String(); 
    response += "HTTP/1.1 200 OK\r\n"; 
    response += "Date: " + nowDate + "\r\n"; 
    response += "Content-Type: image/png\r\n"; 
    response += "Content-Length: " + file.length() + "\r\n"; 
    response += "Connection: keep-alive\r\n"; 
    response += "\r\n"; 
    out.println(response); 
    IOUtils.copy(stream, out2); 
    out.close(); 
    out2.close(); 

답변

2

이미지를 렌더링 할 때 쓰기 클래스를 사용하고 있습니다. OutputStream를 사용해 이미지를 기입합니다. 이미지는 바이트이며 항상 바이트 기반 스트림을 사용하여이를 렌더링해야합니다.

+0

나는 이런 식으로 시도했지만 불행히도 브라우저에 "오류가 있기 때문에 ..... 이미지를 표시 할 수 없습니다."라고 반환됩니다. \t \t'OutputStream out2 = server.getOutputStream(); \t \t \t \t BufferedImage originalImage = ImageIO.read (새 파일 (HttpServer.getHomePath() + httpRequestedPage))); \t \t ByteArrayOutputStream baos = new ByteArrayOutputStream(); \t \t ImageIO.write (originalImage, "png", baos); \t \t baos.flush(); \t \t [] imageInByte = baos.toByteArray(); out2.write (imageInByte); ' –

+0

OutputStream out2 = server.getOutputStream(); server.setContentType ("image/png"); InputStream stream = 새 FileInputStream (새 파일 (HttpServer.getHomePath() + httpRequestedPage)); IOUtils.copy (stream, out2); – pravat

+0

불행히도 그것은 나에게 같은 오류를 반환합니다. 질문을 편집하여 코드의 새 버전을 게시 할 수 있습니다. 감사합니다 –

0

바이트를 String으로 변환하는 경우 Base64 인코딩을 사용해야합니다. 그리고 클라이언트 쪽에서 "data:image/png;base64," + imageData과 비슷한 이미지 src을 지정할 수 있습니다.

관련 문제