js pako.inflate 解压zlib压缩文件

场景:web前端在获取一些基础数据(比如:地区数据、行业、学历、专业,各种分类、属性等等)时,通过服务器一次拉取所有基础数据json压缩包。优点:一可以减少流量,二可以减少很多http请求 …

该例需要浏览器localStorage来存储以上解压后的大量数据,同时,需要XMLHTTPRequest2支持请求二进制数据流,故ie低版本浏览器不适用…

# 方法代码

/**
 * XMLHttpRequest2
 */
ajax2 = function (opts) {
    var XHR = new XMLHttpRequest();
    XHR.open(opts.type || 'GET', opts.url, true);
    XHR.responseType = opts.dataType || 'arraybuffer';
    XHR.onload = function(e) {
        opts.success && opts.success(this.response);
    };
    XHR.onerror = function (err) {
        opts.error && opts.error(err);
    }
    XHR.send();
};


/**
 * 解压zlib数据
 * @param url 数据包url地址
 * @param callback 数据包获取完成回调函数
 */
getZlibBasicData = function (url, callback) {
    // 成功处理
    function successHandler(data) {
        data = new Uint8Array(data);
        console.log(data);
        try {
            var result = JSON.parse(pako.inflate(data, { to: 'string' }));
            callback && callback({
                code: 0,
                msg: 'Success',
                data: result
            });
        } catch (e) {
            callback && callback({
                code: 2,
                msg: e,
                data: data,
                url: url
            });
        }
    };
    // 错误处理
    function errorHandle(err) {
        callback && callback({
            code: 1,
            msg: 'ERROR: getZlibXmqData() Ajax2 ...',
            data: err
        });
    };
    // 请求数据
    ajax2({
        url: url,
        // dataType: 'arraybuffer',
        // type: 'GET',
        success: successHandler,
        error: errorHandle
    });
};

# 使用

// 数据包地址
var url = 'http://config-1253933147.file.myqcloud.com/app/xmq_data20170927344.zip';
// 获取数据包json内容
getZlibBasicData(url, function (res) {
    console.log(res);
});

pako 的使用我未深究,需要的同学可以去git阅读详情。

pako 源码:https://github.com/nodeca/pako

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值