上一次的多类型支持,是在服务器响应浏览器请求的时候,提供给浏览器访问文件的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
原文:https://www.cnblogs.com/xsliu/p/13445487.html