通过Java

时间:2016-10-23 14:33:54

标签: java image sockets http response

我正在编写一个HTTP服务器,以便从头开始学习(尝试更深入地学习HTTP),并让服务器向客户端发送带有HTML的HTTP响应而没有太多问题。

当我尝试通过线路发送JPEG图像等二进制数据时出现问题。浏览器似乎无法正确解释它。为此我已将响应的MIME类型设置为image/jpeg,并且与正确的Content-Length一起,我仍然无法正确传输数据。

有点难以理解这一点,并且想知道我对Java中如何读取二进制数据的理解或方法是不正确的?

我正在做的一般方法是将文件从磁盘读入FileInputStream,然后将数据读入1024字节缓冲区。当我读入缓冲区时,我将缓冲的数据写入DataOutputStream,其客户端的套接字连接为OutputStream。我在使用它之后正在刷新并关闭数据。

我为我的HTTP响应生成我的身体的部分在这里:

        FileInputStream fis = new FileInputStream("www/server.jpg");
        byte[] buffer = new byte[1024];
        DataOutputStream dos = new DataOutputStream(this.clientSocket.getOutputStream());
        int read;
        while((read=fis.read(buffer)) >= 0) {
            dos.write(buffer, 0, read);
        }

        dos.flush();

        fis.close();
        dos.close();

我已经硬编了一些东西,但我认为这通常会引起我的疑问。因此,当我发出如下所示的HTTP请求时,我收到以下响应:

enter image description here

在FireFox中,图像尝试渲染,但我收到消息: enter image description here

我要显示的图片是: enter image description here

有人有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

所以,@ rkosegi关于从20161023T150422下载文件的评论帮助我找出了问题所在。显然我正在错误地构建我的响应体。发生的事情是在我的HTTP实体标题之后在body内容之前插入了一个新行。在流式传输正文内容之前删除了这个额外的换行符之后,我能够让浏览器正确地解释数据。

D'哦!