首先,确保您的 GIF 文件没有损坏。(以前也发生在我身上)。
如果是这种情况,请尝试使用以下代码发送 GIF 文件:
byte[] fileByte = Files.readAllBytes(filePath);
writer.writeBytes("HTTP/1.1 200 OK\r\n");
writer.writeBytes("Content-Type: image/gif\r\n");
writer.writeBytes("Content-Length: "+fileByte.length+"\r\n");
writer.writeBytes("\r\n");
writer.write(fileByte, 0, fileByte.length);
然后尝试直接导航到“house.gif”而不是“myHome.htm”。在评论中让我知道这是做什么的。
以前的答案尝试:
我想我可能误解了你的问题。让我尝试一个不同的答案:
您不确定如何在服务器上确定何时返回 HTML 文件 myHome.htm 以及何时返回 house.gif?
我认为为此您需要简单地解析出请求的 URL。只需检查它是否包含“house.gif”。然后,根据这一点,您可以返回如上所述的 HTML 文件,或者发送 .gif 文件,确保使用
writer.write(fileByte, 0, fileByte.length);
发送二进制数据并设置回复标头
Content-Type: image/gif
但是,在这两种情况下(对于 HTML 文件和 GIF 文件),您都应该在发送的数据前面加上正确的 HTTP 响应标头。不要以错误的方式使用页面标题,但此站点可能会有所帮助: http: //net.tutsplus.com/tutorials/other/http-headers-for-dummies/
并且只是为了确保:您的服务器将接收两个独立的请求。第一个会要求 HTML 文件,第二个会要求 GIF 文件。所以你发送一个或另一个。因此,没有“特殊方式”来发送 GIF 而不是 HTML 文件。您使用相同的 clientSocket。但这是一种不同的联系。
以前的答案:
我认为您可能缺少返回数据的 mime 类型。尝试将以下 HTTP 标头添加到您的回复中:
Content-Type: image/gif
实际上...您是否发送了正确的 HTTP 回复(包括标头,特别是 Content-Length)?如果没有,请给我留言,我会发布您需要的代码。
如果由于某种原因,您无法设置 content-type 标头以让浏览器知道您正在向其发送图像,则您可以使用 XMLHttpRequest 将客户端上的二进制数据加载到 JavaScript 函数中,而不是指定它作为 img 标签的源 URL。然后,您可以使用 JavaScript 将二进制数据编码为具有正确 mime 类型的 dataURI ( http://en.wikipedia.org/wiki/Data_URI_scheme ),并将其设置为图像源。
实际上,我只是注意到您的代码中有一些内容:
new String(fileByte)
可能将 fileBytes 解释为 unicode 字符而不是二进制。然后,当您将其写入编写器时,它可能会搞砸,因为图像中的所有数据可能不是有效的 unicode。尝试用这个替换该行:
writer.write(fileByte, 0, fileByte.length);
也许这就是你需要做的全部修复它???