简单的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

  • 简单的Tomcat实现--4.2 二进制文件支持_第1张图片

你可能感兴趣的:(简单的Tomcat实现--4.2 二进制文件支持)