BIMFACE的离线数据包中含有一些预先压缩好的.gz文件,而实际浏览模型时需要的是解压后的文件。 为了能够正常浏览模型,需要在.gz文件的响应头(Response Headers)中加上“Content-Encoding: gzip”,这样浏览器在获取到这些.gz文件后就会自动作解压处理。
如何自定义.gz文件的响应头?不同WEB服务器的配置方法不一样,下面列举了几种常见的服务器的配置方法,以供参考。
修改配置文件 nginx.conf
在http/server里面添加一个location节点,内容如下:
location ~* .*\.gz$ {
root /databags; # 数据包所在目录
add_header Content-Encoding gzip;
}
修改配置文件 httpd.conf
加载 headers_module,即去掉此行前面的注释符号#:
LoadModule headers_module modules/mod_headers.so
在<IfModule headers_module>小节中添加 FilesMatch:
<IfModule headers_module>
<FilesMatch "\.(gz)$">
header set Content-Encoding "gzip"
</FilesMatch>
</IfModule>
参考以下 server.js 代码,为.gz文件添加 Content-Encoding 头:
const express = require('express');
const path = require('path');
const fs = require('fs');
const app = express();
app.get('*', function getjs(req, res, next) {
var path = req.path,
arr = path.split('/'),
dir = arr.slice(0,arr.length-1).join('/'),
name = arr[arr.length-1];
var files=fs.readdirSync(`./${dir}`);
files.forEach(function(item,index){
console.log(`.${path}`)
if(item==name){
if(name.slice(-3)=='.gz'){
fs.readFile(`.${path}`,function(err,data){
res.writeHeader(200,{'Content-Encoding':'gzip','Content-Type':'application/octet-stream'})
res.write(data)
res.end();
})
}else{
res.sendFile(`${__dirname}${path}`);
}
return
}
})
})
app.listen(8080, () => {
console.log('ok')
})
写一个Filter,导出成 jar 后,放到 tomcat\lib 目录下
package cn.common.java.utility;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class gzipFilter implements Filter {
public void destroy() {}
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest)servletRequest;
HttpServletResponse response = (HttpServletResponse)servletResponse;
response.setHeader("Content-Encoding", "gzip");
chain.doFilter(request, response);
}
public void init(FilterConfig filterConfig) throws ServletException {}
}
然后修改 tomcat\conf\web.xml,重启 tomcat
<filter>
<filter-name>gzipFilter</filter-name>
<filter-class>cn.common.java.utility.gzipFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>gzipFilter</filter-name>
<url-pattern>*.gz</url-pattern>
</filter-mapping>
在含有.gz文件的目录中添加配置文件 web.config,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<directoryBrowse enabled="true" />
<staticContent>
<remove fileExtension=".gz" />
<mimeMap fileExtension=".json" mimeType="text/json" />
<mimeMap fileExtension=".gz" mimeType="application/octet-stream" />
</staticContent>
</system.webServer>
</configuration>