1
我的問題是,我無法獲得非文本文件在瀏覽器中正確顯示。在我的服務器代碼中,我使用while循環來偵聽請求。當請求進入時,我將標題讀入變量headers
。之後,我檢查請求是否是GET請求。如果是,那麼我檢查文件是否存在,並且它是文件而不是目錄。然後,我查看文件的擴展名,以確定HTTP響應中的下一行。家庭Java Java HTTP服務器沒有正確地提供非文本文件
pw.print("HTTP/1.1 Status: 200 OK\r\n");
String ext = file.getName().substring(file.getName().lastIndexOf('.') + 1, file.getName().length());
if(ext.equals("txt"))
{
pw.print("Content-Type: text/plain\r\n\r\n");
}
else if(ext.equals("html"))
{
pw.print("Content-Type: text/html\r\n\r\n");
}
else if(ext.equals("jpg"))
{
pw.print("Content-Type: image/jpeg\r\n\r\n");
}
else if(ext.equals("png"))
{
pw.print("Content-Type: image/png\r\n\r\n");
}
else if(ext.equals("pdf"))
{
pw.print("Content-Type: application/pdf\r\n\r\n");
}
if(!ext.equals("txt") && !ext.equals("html"))
{
ImageInputStream imageStream = ImageIO.createImageInputStream(file);
BufferedImage bufferedImage = ImageIO.read(file);
ImageIO.write(bufferedImage, ext, socket.getOutputStream());
}
現在,據我知道,一旦我進入最後的條件(我請求localhost:port/my_png.png
)則內容應寫入插座和,因爲我告訴它什麼它Content-Type
應該是,在瀏覽器應該能夠解釋該文件。不幸的是,這並沒有發生。我在瀏覽器中獲取字節輸出的文本。我的輸出看起來像這樣:
‰PNG
���
IHDR���i���`���‘ïË¥��%IDATxÚíœ=h#×úÆ]ÜBE
有誰知道我爲什麼會遇到這個問題?
我不知道這是問題的原因,但不應該有一個內容長度? – ThePerson 2014-09-13 20:16:49
我也建議在這裏尋找獲取內容類型,而不是有很多if-else ifs:http://stackoverflow.com/questions/51438/getting-a-files-mime-type-in-java – ThePerson 2014-09-13 20:18:26
Your代碼不足以說明問題的確切位置,但可能會出現一個錯誤:是否將套接字連接到瀏覽器?如果是這樣,那麼看起來你並沒有在正文之前寫頭文件。你可以發佈更多的代碼嗎? – morgano 2014-09-13 20:34:02