首先,確保你的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。但它是一個不同的聯繫。
前面的答案(S):
我想你可能會缺少MIME類型的返回的數據。嘗試添加下面的HTTP標頭到您的回覆:
Content-Type: image/gif
其實......你發送的所有正確的HTTP應答(包括標題,具體內容長度)?如果沒有,給我發一條評論,我會發布你需要的代碼。
如果出於某種原因無法設置內容類型頭讓瀏覽器知道您正在向其發送圖像,則可以使用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);
也許這就是你需要做的所有修復它?
'new String(fileByte)'-shudders-永遠不要這樣做。一個字節數組不是字符串。 – leonbloy 2013-02-10 23:28:10
但它適用於html ^^ – jt123 2013-02-10 23:30:12
一個字符串是文本。 html是文本。圖像不是。 – leonbloy 2013-02-11 00:51:05