通过浏览器显示或下载图像

时间:2016-03-09 12:19:26

标签: java sockets http

我有一个服务器,显示用户从浏览器请求的内容,我使用的是Linux,当我运行服务器并使用此链接{{1}请求 Image.png 这样的文件时在FireFox上我收到这条消息:

  

无法显示图像“localhost:9999 / Image.png”,因为它   包含错误。

但是当我将变量fileName更改为HTML文件时,它可以完美地工作,我可以将html页面可视化。

我做错了什么?

这是我的服务器:

localhost:9999/Image.png

1 个答案:

答案 0 :(得分:1)

您没有将png文件的内容写入bw BufferedWriter。相反,您只是将响应的标头发送给客户端。当您指示您的响应是png图像并且没有数据时,您的浏览器会告诉您图像包含错误(实际上,它根本不包含任何内容)。

打开png文件名,将数据写入“bw”缓冲区以将其发送到客户端。那应该够了。

编辑:

为此,请尝试以下代码为“if”是图像:

if(extension.equals("png"))
{
    File file = new File(fileName);
    FileInputStream fis = new FileInputStream(file);
    byte[] data = new byte[(int) file.length()];
    fis.read(data);
    fis.close();

    DataOutputStream binaryOut = new DataOutputStream(outS);
    binaryOut.writeBytes("HTTP/1.0 200 OK\r\n");
    binaryOut.writeBytes("Content-Type: image/png\r\n");
    binaryOut.writeBytes("Content-Length: " + data.length);
    binaryOut.writeBytes("\r\n\r\n");
    binaryOut.write(data);

    binaryOut.close();
}

请注意,与html时使用的文本流相比,使用二进制流。