簡單的Tomcat實現--4.2 二進位制檔案支援
阿新 • • 發佈:2020-08-06
二進位制檔案的支援
-
上一次的多型別支援,是在伺服器響應瀏覽器請求的時候,提供給瀏覽器訪問檔案的
mimeType
,讓瀏覽器能夠正確的讀取檔案的內容。response
類中 最終反饋給瀏覽器的是一個字元陣列,然後通過socket
獲取字元輸出流,把字元傳輸給瀏覽器。 -
但是我們在伺服器端讀取檔案的時候,是使用
FileUtil
工具類中的readUtf8String
去讀取的,這種方式讀取文字檔案合適,但是讀取二進位制檔案不合適,無法爭取讀出來。 -
首先給
response
類加一個字元陣列的欄位body
, 並設定好set方法 -
private byte[] body; public void setBody(byte[] body) { this.body = body; }
-
然後修改之前的
getBody()
方法,在Server
類中如果檔案存在,那就直接使用FileUtil.readBytes()
來讀取檔案的內容,然後使用response
的setBody()
方法將這個字元陣列傳給response,如果body不為空,在getBody()
方法中就直接返回即可。 -
public byte[] getBody(){ if (body == null) { throw new UnsupportedEncodingException(); } return body; }
-
在Server中的改動
-
if (file.exists()) { // 如果訪問的檔案存在 byte[] body = FileUtil.readBytes(file); response.setBody(body); // 通過解析檔案的拓展名來獲取瀏覽器處理該檔案的type String extName = FileUtil.extName(file); String mimeType = WebXmlUtil.getMimeType(extName); response.setContentType(mimeType);
-
啟動服務,訪問/a.mp4