前端Vue2.6.10数据压缩(zlib/pako)和解压(zlib/pako),后端Python3.7数据压缩(zlib)和解压(zlib)
前端Vue2.6.10数据压缩(zlib/pako)和解压(zlib/pako),后端Python3.7数据压缩(zlib)和解压(zlib)
·
(注:前后端压缩都加上了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。
更多推荐
已为社区贡献1条内容
所有评论(0)