【问题标题】:Sending images over http to browser通过 http 将图像发送到浏览器
【发布时间】:2013-03-27 17:20:19
【问题描述】:

我想用java实现一个简单的web服务器。 问题是图像没有在网络浏览器上正确呈现;如果我访问 localhost:8888/image.png,我所能看到的只是一个具有精确宽度、高度和重量的白色正方形。 先感谢您! :)

代码如下:

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

【问题讨论】:

    标签: java http


    【解决方案1】:

    您正在使用 Write 类来渲染图像。使用 OutputStream 写入图像。图像是字节,应该使用基于字节的流来渲染它们。

    【讨论】:

    • 我尝试过这样的事情,但不幸的是浏览器返回“图像.....无法显示,因为它包含错误”。 OutputStream out2 = server.getOutputStream(); BufferedImage originalImage = ImageIO.read(new File(HttpServer.getHomePath() + httpRequestedPage)); ByteArrayOutputStream baos = new ByteArrayOutputStream(); ImageIO.write( originalImage, "png", baos ); baos.flush(); byte[] imageInByte = baos.toByteArray(); out2.write(imageInByte);
    • OutputStream out2 = server.getOutputStream(); server.setContentType("图片/png"); InputStream 流 = new FileInputStream(new File(HttpServer.getHomePath() + httpRequestedPage)); IOUtils.copy(stream, out2);
    • 不幸的是,它返回了同样的错误。我编辑了这个问题,以便我可以在那里发布新版本的代码。谢谢
    • 代码对我来说似乎不错。尝试删除 Writer 部分。在您的方法中使用上述注释的确切代码,看看是否可以解决该问题。
    • 问题是在我的代码中服务器被声明为'private Socket server;',而我不是在写一个servlet应用程序......所以我不能使用setContentType方法。跨度>
    【解决方案2】:

    如果要将字节转换为String,则必须使用Base64 编码。在客户端,您可以指定类似于此"data:image/png;base64," + imageData 的图像src

    【讨论】:

      猜你喜欢
      • 2015-04-22
      • 1970-01-01
      • 2014-06-30
      • 2010-12-29
      • 2013-09-10
      • 2012-07-03
      • 2015-07-22
      • 1970-01-01
      • 2011-05-08
      相关资源
      最近更新 更多