openresty使用gzip压缩解压,openrestygzip


1、查看 zlib在centos 中是否存在?
rpm -qa | grep zlib

显示:
zlib-devel-1.2.3-29.el6.x86_64
zlib-1.2.3-29.el6.x86_64

2、安装cmake编译器

yum install -y gcc gcc-c++ make automake 
wget http://www.cmake.org/files/v2.8/cmake-2.8.10.2.tar.gz
tar -zxvf cmake-2.8.10.2.tar.gz
cd cmake-2.8.10.2
./bootstrap
gmake
gmake install

检查cmake安装
cmake --version
显示
cmake version 2.8.10.2
表示安装成功

3、下载lua-zlib包,并解压
unzip lua-zlib-master.zip
cd /usr/local/software/lua-zlib-master

cmake -DLUA_INCLUDE_DIR=/usr/local/openresty/luajit/include/luajit-2.1

若报错:CMake Error at CMakeLists.txt:27 (find_package):
  By not providing "FindLua.cmake" in CMAKE_MODULE_PATH this project has
  asked CMake to find a package configuration file provided by "Lua", but
  CMake did not find one.

/usr/local/share/cmake-2.8/Modules目录下(该目录可能不存在FindLua.cmake,查询其他.cmke文件获取目录),有FindLua51.cmake,改名为FindLua.cmake,重新执行上个命令。


make

cp zlib.so /usr/local/openresty/lualib/zlib.so

4.lua脚本调用

local zip = require 'zlib'

local uncompress = zip.inflate()
local compress = zip.deflate()


local deflated, eof, bytes_in,bytes_out =compress("asdasdasdasdasdasdasdasdasd", 'finish')
print(deflated, eof, bytes_in,bytes_out)
local uss,ret,getin,getout=uncompress(deflated)print(uss,ret,getin,getout)

print(uss,ret,getin,getout)

5.zlib库不能直接压缩gzip格式,使用lua-ffi-zlib

源码路径:https://github.com/hamishforbes/lua-ffi-zlib

调用:

local ffi_zlib = require "lib.ffi-zlib"

local chunk = 16384
    local count = 0 
    
    local input = function(bufsize)  
        local start = count > 0 and bufsize*count or 1  
        local data = str:sub(start, (bufsize*(count+1)-1))  
        if data == "" then  
            data = nil  
        end
        print(data)
        count = count + 1  
        return data  
    end 
    local output_table = {}  
    local output = function(data)
        insert(output_table, data)
    end 
    local ok, err = ffi_zlib.deflateGzip(input, output, chunk)  
    if not ok then  
        print(err)
    end  
    local compress = concat(output_table,'')  
    ngx.header["Content-Encoding"] = "gzip"

ngx.print(compress)

相关内容

    暂无相关文章