我有一个服务器,显示用户从浏览器请求的内容,我使用的是Linux,当我运行服务器并使用此链接{{1}请求 Image.png 这样的文件时在FireFox上我收到这条消息:
无法显示图像“localhost:9999 / Image.png”,因为它 包含错误。
但是当我将变量fileName更改为HTML文件时,它可以完美地工作,我可以将html页面可视化。
我做错了什么?
这是我的服务器:
localhost:9999/Image.png
答案 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时使用的文本流相比,使用二进制流。