我在Java中使用TCP套接字构建了一个简单的并发Web服务器。它可以很好地服务html,txt,css等...内容但我在提供图像文件时遇到问题(在这种情况下为gif)。
我认为这个过程没问题,因为浏览器获得200 OK状态的图像,数据(路径,文件大小等等)也可以;但是我无法完成浏览器显示图像,它总是显示带有替代文本的空图像。图像的路径也可以。
我尝试过将不同的方法提供给客户端,到目前为止,这些方法都没有对我有用。
这是我用来提供image / gif的代码:
out = new PrintWriter(client.getOutputStream());
httpHeader= (h+" 200 OK \n" +
"Content-Type: image/gif"+"\n" +
"Content-Length: "+f.length()+"\n\n");
//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();
}
答案 0 :(得分:2)
HTTP标头需要\r\n
行终止符,而不是\n
。此外,由于变量httpHeader
包含换行符(尽管是错误的换行符),因此您应该通过调用print()
而不是追加另一个换行符的println()
将其打印到流中。
写完GIF数据后,应谨慎处理。
可能会有更多问题。
(顺便说一句,一次写一个字节数组的GIF数据要快得多。)
答案 1 :(得分:1)
尝试在标题中添加responseType:'arraybuffer'。因此浏览器可以正确地插入文件。