Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从http服务器提供gif图像,在浏览器中不显示ok_Java_Image_Http_Server_Gif - Fatal编程技术网

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

Java 从http服务器提供gif图像,在浏览器中不显示ok,java,image,http,server,gif,Java,Image,Http,Server,Gif,我用Java构建了一个带有TCP套接字的简单并发web服务器。它可以很好地服务于html、txt、css等。。。内容,但我在提供图像文件(本例中为gif)时遇到问题 我认为这个过程是正常的,因为浏览器获得的图像状态为200 ok,数据(路径、文件大小等)也正常;但我无法实现浏览器显示图像,它总是显示一个带有可选文本的空图像。图像的路径也可以 我尝试过不同的方法为客户提供形象服务,到目前为止,没有一种方法对我有效 这是我用于提供图像/gif的代码: out = new PrintWr

我用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();
    }

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

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

可能还有更多的问题


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

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

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

可能还有更多的问题


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

尝试将responseType:“arraybuffer”添加到标头。因此浏览器可以正确地对文件进行排序。

尝试将responseType:“arraybuffer”添加到标题中。因此浏览器可以正确地对文件进行排序。

尝试将responseType:'arraybuffer'添加到标题中。returnGif如何访问客户端的输出流?@SomeRandomName谢谢!!这就是解决办法!您可以将其发布为答案=)尝试将responseType:'arraybuffer'添加到标题中。returnGif如何访问客户端的输出流?@SomeRandomName谢谢!!这就是解决办法!你可以把它作为一个答案发布=)我可以看出这是一个怎样的问题…它已经解决了一半的问题,一些图像显示,但其他的仍然没有。无论如何,谢谢你,我会一直记住你的答案。顺便说一句,你用字节数组写GIF数据是对的,我已经有了这个方法,但我没有使用它。我可以看出这是一个问题……它解决了一半的问题,一些图像显示,但其他仍然没有。无论如何,谢谢你,我会一直记住你的答案。顺便说一句,你用字节数组写GIF数据是对的,我已经有了这个方法,但我没有使用它。