PHP、Python、Vue3之间数据压缩和解压交互

        基于前后台数据交互,因数据传递量过大原因,因此对前后台数据进行压缩数据传输交互,这里使用的是Vue3、PHP、Python进行的数据交互处理,前后数据请求交互代码在此不做赘述,直接写交互请求数据压缩部分:

一、Vue前端使用:

1、前端先安装扩展:

npm install pako

2、数据压缩

import pako from "pako";

let text = '123456'
const u8ArrData = pako.deflateRaw(text , {
  to: "string",
});

let CHUNK_SIZE = 0x8000;
let index = 0;
let length = u8ArrData.length;
let result = '';
let slice;
while (index < length) {
  slice = u8ArrData.subarray(index, Math.min(index + CHUNK_SIZE, length));
  result += String.fromCharCode.apply(null, slice);
  index += CHUNK_SIZE;
}
let newText = btoa(result)
console.log(newText )

3、解压缩数据

import pako from "pako";

// 解压缩数据
let bText = "MzQyNjE1AwA=";
let strData = atob(bText);
// 将二进制字符串转换为字符数数组
const charData = strData.split("").map(function (x) {
  return x.charCodeAt(0);
});
// 将数字数组转换为字节数组
const binData = new Uint8Array(charData);
const data = pako.inflateRaw(binData, {
  to: "string",
});
console.log(data);

二、PHP使用部分代码如下:

1、数据压缩

<?php
    $str = '123456';
    $data = base64_encode(gzdeflate($str));
    echo $data;

2、数据解压缩

<?php
    $bStr = 'MzQyNjE1AwA=';
    $data = gzinflate(base64_decode($bStr));
    echo $data;

三、Python使用部分代码如下:

1、数据压缩

import zlib,base64

data = '123456'.encode('utf-8') #将str转bytes
deflate_compress = zlib.compressobj(9, zlib.DEFLATED, -zlib.MAX_WBITS)
compressed_data = deflate_compress.compress(data)+ deflate_compress.flush()
bStr = base64.b64encode(compressed_data).decode() #bytes转回str
print(bStr)

2、数据解压缩

import zlib,base64

bStr = 'MzQyNjE1AwA='
decompressed_data = zlib.decompress(base64.b64decode(bStr),-zlib.MAX_WBITS)
print(decompressed_data.decode()) #将bytes转会str

Python运行如果出现下面的错误:
zlib.error: Error -3 while decompressing: incorrect header check
这可能是因为您尝试检查不存在的标头,例如您的数据遵循RFC 1951(deflate压缩格式),而不是RFC 1950(zlib压缩格式)或RFC 1952(gzip压缩格式)。
选择windowBits
但是zlib可以解压缩所有这些格式:

要(解压缩)deflate格式,请使用wbits = -zlib.MAX_WBITS
要(解压缩)zlib格式,请使用wbits = zlib.MAX_WBITS
要(解压缩)gzip格式,请使用wbits = zlib.MAX_WBITS | 16

具体解释信息可以参考:关于python:zlib.error:解压缩时出现错误-3:标头检查不正确 | 码农家园

  • 14
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值