从 http 服务器提供 gif 图像,在浏览器中显示不正常

Serve gif image from http server, not displaying ok in the browser

我在 Java 中使用 TCP 套接字构建了一个简单的并发 Web 服务器。它可以很好地提供 html、txt、css 等内容...但我在提供图像文件(在本例中为 gif)时遇到问题。

我认为这个过程没问题,因为浏览器得到状态为 200 OK 的图像和数据(路径、文件大小等...)也没问题;但我无法让浏览器显示图像,它总是显示带有替代文本的空图像。图片路径也可以。

我尝试了多种向客户端提供图像的方法,none 到目前为止对我有用。

这是我用于服务 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();
    }

HTTP header 需要 \r\n 行终止符,而不是 \n。此外,由于变量 httpHeader 包含换行符(尽管换行符类型错误),您应该通过调用 print() 将其打印到流中,而不是 println() 附加另一个换行符。

GIF 数据写入后刷新是明智的。

可能还有更多问题。

(顺便说一句,一次写入一个字节数组的 GIF 数据会快得多。)

尝试将 responseType:'arraybuffer' 添加到 header。因此浏览器可以正确解释文件。