我在Java中构建了一个简单的并发Web服务器,其中包含TCP套接字。它可以很好地服务于html,txt,css等...内容,但我在提供图像文件(在本例中为 gif(时遇到问题。
我认为这个过程还可以,因为浏览器获得具有 200 OK 状态的图像和数据(路径、文件大小等(也可以;但我无法完成浏览器显示图像,它总是显示带有替代文本的空图像。图像的路径也可以。
我已经尝试了将图像提供给客户端的不同方法,到目前为止,它们都不适合我。
这是我用于提供图像/gif 的代码:
out = new PrintWriter(client.getOutputStream());
httpHeader= (h+" 200 OK n" +
"Content-Type: image/gif"+"n" +
"Content-Length: "+f.length()+"nn");
//Send header to the client
out.println(httpHeader);
out.flush();
//Send gif file content to the cliente
returnGIF(f);
private void returnGIF(File f) throws IOException{
FileInputStream fis = new FileInputStream(f.getPath());
int b=0;
while ((b=fis.read()) != -1){
out_bis.write(b);
}
fis.close();
}
HTTP 标头需要具有 rn
行终止符,而不是 n
。此外,由于变量httpHeader
包含换行符(尽管是错误的换行符(,您应该通过调用 print()
来将其打印到流中,而不是附加另一个换行符的println()
。
谨慎的做法是在写入 GIF 数据后刷新它。
可能会有更多的问题。
(顺便说一句,一次写入一个字节数组的 GIF 数据会快得多。
尝试将 responseType:'arraybuffer' 添加到标头中。因此,浏览器可以正确插入文件。