(注:前后端压缩都加上了base64;文章所提及的压缩和解压仅仅针对数据,不是文件。)

一、前端Vue2.6.10两种压缩和解压的方式(zlib模块和pako模块)

1.zlib模块和pako模块(建议使用zlib就行)

①.导入zlib、pako、iconv-lite

npm install zlib
//只使用zlib的方式,下面的包不用下载
npm install pako
npm install iconv-lite

②.解压函数(可解压前端压缩的数据,也可解压python后端解压的数据)

import Zlib from 'zlib'
import iconv from 'iconv-lite'
import pako from 'pako'

zlib_unzip(info){
  // zlib解压
  var buffer = new Buffer(info, 'base64')
  var inflate = Zlib.inflateSync(buffer)
  return inflate.toString()
}

pako_unzip(info){
  // pako解压:可以解压前后端使用zlib压缩的数据
  let charData = atob(data).split('').map(function (x) { return x.charCodeAt(0); });
  let binData = new Uint8Array(charData);
  return pako.inflate(binData,{to: 'string'});
}

③.压缩函数

import Zlib from 'zlib'
import iconv from 'iconv-lite'
import pako from 'pako'

zlib_zip(str){
    // zlib压缩
    var deflate = Zlib.deflateSync(str, {level: 9})
    return deflate.toString('base64')
}

pako_zip(str){
    // pako压缩(后端python不太好解压)
    return btoa(pako.gzip(str,{to: 'string'}));
    //下面加上iconv.encode可进行转码
    // return btoa(pako.gzip(iconv.encode(str,'gbk'),{to: 'string'}));
}

二、Python3.7使用zlib进行压缩和解压

1.zlib模块

①.解压函数(可解压Vue前端压缩的数据,也可解压后端解压的数据)和压缩函数

import zlib
import base64
from base64 import urlsafe_b64decode

# 压缩(base64转换)
def compress_infos(infos, level=9):
    if not isinstance(infos, bytes):
        infos = infos.encode(encoding='utf-8')
    compress_data = zlib.compress(infos, level)
    compress_data = str(base64.b64encode(compress_data)).lstrip("b").strip("'")
    return compress_data

# 解压(base64转换)
def decompression_infos(compress_data):
    infos = zlib.decompress(urlsafe_b64decode(compress_data)).decode('utf-8')
    return infos

三、总结。

前端Vue和Python后端数据交互的时候建议双方都使用zlib解压和压缩。当前端使用pako进行数据压缩时,在后端python解压时容易报zlib.error: Error -3 while decompressing data: incorrect header check的错误,不是特别好解决,所以前端也使用zlib。

Logo

前往低代码交流专区

更多推荐