1. 程式人生 > 實用技巧 >簡單的Tomcat實現--4.2 二進位制檔案支援

簡單的Tomcat實現--4.2 二進位制檔案支援

二進位制檔案的支援

  • 上一次的多型別支援,是在伺服器響應瀏覽器請求的時候,提供給瀏覽器訪問檔案的mimeType,讓瀏覽器能夠正確的讀取檔案的內容。response類中 最終反饋給瀏覽器的是一個字元陣列,然後通過socket獲取字元輸出流,把字元傳輸給瀏覽器。

  • 但是我們在伺服器端讀取檔案的時候,是使用FileUtil工具類中的readUtf8String去讀取的,這種方式讀取文字檔案合適,但是讀取二進位制檔案不合適,無法爭取讀出來。

  • 首先給response類加一個字元陣列的欄位body, 並設定好set方法

  • private byte[] body;
    
    public void setBody(byte[] body) {
        this.body = body;
    }
    
  • 然後修改之前的getBody()方法,在Server類中如果檔案存在,那就直接使用FileUtil.readBytes()來讀取檔案的內容,然後使用responsesetBody()方法將這個字元陣列傳給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