Skip to content

bimface/databagServerConfig

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 

Repository files navigation

  BIMFACE的离线数据包中含有一些预先压缩好的.gz文件,而实际浏览模型时需要的是解压后的文件。 为了能够正常浏览模型,需要在.gz文件的响应头(Response Headers)中加上“Content-Encoding: gzip”,这样浏览器在获取到这些.gz文件后就会自动作解压处理。

  如何自定义.gz文件的响应头?不同WEB服务器的配置方法不一样,下面列举了几种常见的服务器的配置方法,以供参考。

ngnix

修改配置文件 nginx.conf
在http/server里面添加一个location节点,内容如下:

location ~* .*\.gz$ {
    root       /databags; # 数据包所在目录
    add_header Content-Encoding gzip;
} 

apache

修改配置文件 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>

nodejs

参考以下 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')
})

tomcat

写一个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>

iis

$\color{red}{* 我们已经事先给每个离线数据包做好了此配置,如果你使用iis服务器则不需要再做此配置。}$
在含有.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>

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published