2013-03-27 102 views
0

我想用java實現一個簡單的web服務器。 問題是圖像在Web瀏覽器上無法正確顯示;所有我能看到的,如果我去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

您正在使用Write類來渲染圖像。使用OutputStream寫入圖像。圖像是字節,總是應該使用基於字節的流來渲染它們。

+0

我嘗試了這樣的事情,但不幸的是瀏覽器返回「圖像.....無法顯示,因爲它包含錯誤」。 \t \t'OutputStream out2 = server.getOutputStream(); \t \t \t \t BufferedImage originalImage = ImageIO.read(new File(HttpServer.getHomePath()+ httpRequestedPage)); \t \t ByteArrayOutputStream baos = new ByteArrayOutputStream(); \t \t ImageIO.write(originalImage,「png」,baos); \t \t baos.flush(); \t \t byte [] imageInByte = baos.toByteArray(); out2.write(imageInByte);' – 2013-03-27 18:51:04

+0

OutputStream out2 = server.getOutputStream(); server.setContentType(「image/png」); InputStream stream = new FileInputStream(new File(HttpServer.getHomePath()+ httpRequestedPage));IOUtils.copy(stream,out2); – pravat 2013-03-27 19:08:12

+0

不幸的是它返回了同樣的錯誤。我編輯了這個問題,以便我可以在那裏發佈新版本的代碼。謝謝 – 2013-03-27 19:45:20

0

如果要將字節轉換爲String,則必須使用Base64編碼。而在客戶端,您可以指定類似於"data:image/png;base64," + imageData的圖像src