【问题标题】:Serve gif image from http server, not displaying ok in the browser从 http 服务器提供 gif 图像,在浏览器中无法正常显示
【发布时间】:2015-05-20 22:18:32
【问题描述】:

我用 Java 中的 TCP 套接字构建了一个简单的并发 Web 服务器。它可以很好地提供 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()+"\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();
    }

【问题讨论】:

  • 尝试将 responseType:'arraybuffer' 添加到标题中。
  • returnGif如何获取客户端的输出流?
  • @SomeRandomName 谢谢!!这就是解决方案!您可以将其发布为答案 =)

标签: java image http server gif


【解决方案1】:

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

谨慎的做法是在写入 GIF 数据后刷新它。

可能还有更多问题。

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

【讨论】:

  • 我可以看出这是一个问题...它已经解决了一半的问题,一些图像显示但其他图像仍然没有。无论如何,谢谢,我会继续努力记住你的答案。
  • 顺便说一句,你用字节数组写GIF数据是对的,我已经有了方法,但我没有使用它。
【解决方案2】:

尝试将 responseType:'arraybuffer' 添加到标头。所以浏览器可以正确地解释文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-30
    • 1970-01-01
    • 1970-01-01
    • 2018-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多