我的问题是我无法在浏览器中正确显示非文本文件。在我的服务器的代码中,我使用while循环来监听请求。当请求进入时,我将标题读入变量headers
。之后,我检查请求是否是GET请求。如果是,那么我检查文件是否存在,并且它是文件而不是目录。然后,我查看文件的扩展名以确定HTTP响应中的下一行。
pw.print("HTTP/1.1 Status: 200 OK\r\n");
String ext = file.getName().substring( file.getName().lastIndexOf('.') + 1, file.getName().length() );
if(ext.equals("txt"))
{
pw.print("Content-Type: text/plain\r\n\r\n");
}
else if(ext.equals("html"))
{
pw.print("Content-Type: text/html\r\n\r\n");
}
else if(ext.equals("jpg"))
{
pw.print("Content-Type: image/jpeg\r\n\r\n");
}
else if(ext.equals("png"))
{
pw.print("Content-Type: image/png\r\n\r\n");
}
else if(ext.equals("pdf"))
{
pw.print("Content-Type: application/pdf\r\n\r\n");
}
if( !ext.equals("txt") && !ext.equals("html") )
{
ImageInputStream imageStream = ImageIO.createImageInputStream(file);
BufferedImage bufferedImage = ImageIO.read(file);
ImageIO.write(bufferedImage, ext, socket.getOutputStream());
}
现在,据我所知,一旦我进入最后一个条件(我正在请求localhost:port/my_png.png
),那么内容应该写入套接字,因为我告诉它Content-Type
应该是,浏览器应该能够解释该文件。不幸的是,这种情况并没有发生。我在浏览器中获取文本输出是字节。我的输出看起来像这样:
‰PNG
���
IHDR���i���`���‘ïË¥��%IDATxÚíœ=h#×úÆ]ÜBE
有谁知道为什么我遇到这个问题?
答案 0 :(得分:0)
@morgano:是的,在写信pw.flush()
之前我需要socket
。非常感谢。